Azure CLI 本质 Restful API

为何 Azure CLI / SDK / Portal / PowerShell 的行为可以一致,背後的逻辑其实就是 Azure REST API

可以用 chrome dev tool 查看 Azure Cloud Shell,能发现使用许多 Azure Restful API
image

用 Azure CLI 搭配 --debug option 做验证,能发现底层也都是 TCP 的 Restful API 传输

az group list --debug

image

例子 - Azure Restful API 建立群组 :

最简单方式,使用 Azure CLI 提供封装好的 restful 工具 : az rest

az rest -m put --header "Accept=application/json" -u 'https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}?api-version=2020-06-01' --body "{\"location\": \"eastasia\"}"

实际执行效果

weihan@Azure:~$ az rest -m put --header "Accept=application/json" -u 'https://management.azure.com/subscriptions/c905f1a3-b790-47cb-98f5-eb7b89d7d768/resourcegroups/weidemo20201013?api-version=2020-06-01' --body "{\"location\": \"eastasia\"}"
{
  "id": "/subscriptions/c905f1a3-b790-47cb-98f5-eb7b89d7d768/resourceGroups/weidemo20201013",
  "location": "eastasia",
  "name": "weidemo20201013",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "type": "Microsoft.Resources/resourceGroups"
}

不依赖 Azure rest CLI 方式 :
实际情况中,不是每个环境都有 Azure CLI,这时可以使用 Azure Restful API 管理资源,并且这是依靠 TCP 可以让 Java、C#、Python、Curl 跨多平台环境都能轻松实作,并做到相同行为效果。

第一步 : 需要建立 Azure Active Directory 来进行自动化身份验证

az ad sp create-for-rbac --name [APP_NAME]

image

第二步 : 因为 Azure API 使用 OAuth2 协议,所以我们需要先获取 token,将刚才取得的 appId、password、tenant 替换以下的 curl 参数

curl -X POST -d 'grant_type=client_credentials&client_id=[APP_ID]&client_secret=[PASSWORD]&resource=https%3A%2F%2Fmanagement.azure.com%2F' https://login.microsoftonline.com/[TENANT_ID]/oauth2/token

image

第三步 : 使用 az account list --output table --query '[].{Name:name, SubscriptionId:id}' 找到 SubscriptionId
image

第四部 : 使用 curl + token 发送请求建立群组

curl -X PUT  -H "Accept=application/json" -H "Content-Type: application/json" -H "Authorization: Bearer <<token>>" --data '{"location": "eastasia"}' https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}?api-version=2020-06-01 

image
image

小知识 :

Q. 为何 Azure CLI 数据量大的时候,就算使用 JMESPath 筛选资料,查询速度一样没变?
A. 使用 az consumption usage list --query "[0]" --debug 抓取第一笔资料,可以发现 Azure 是将全部资料丢回,没有在 Server 筛选,运算压力直接放在 Client ,除非有提供filter 参数,才能启用 server 端筛选,举例 :

az consumption usage list -s '2020-10-12' -e '2020-10-14' --query "[0]" --debug

会转成以下包含 filter 的 reqeust ,并在 azure server 只取回 10/12-10/14 号的资料

https://management.azure.com:443 "GET /subscriptions/c905f1a3-b790-47cb-98f5-eb7b89d7d768/providers/Microsoft.Consumption/usageDetails?$filter=properties%2FusageEnd%20ge%20%272020-10-12T00%3A00%3A00Z%27%20and%20properties%2FusageEnd%20le%20%272020-10-14T00%3A00%3A00Z%27&api-version=2018-01-31 HTTP/1.1"

Tip : 藉由 --debug option,可以不用打开 Azure 文件查询,直接查 http_logger : Request 资料就可以知道 Azure CLI 对应的 API 跟使用方式,很方便。


<<:  故事二十八:人口密度高的地区,每一户的所得总额是不是也比较高呢?

>>:  Checkbox 与 Radio 组件-金鱼都能懂的Bootstrap5网页框架开发入门

Day -9 while与for

while 常见用法如下: //while count = 1 while count<=5:...

登录档改造(三)--因人而异的专业玩法

最近去图书馆借的登录档的参考书终於到了,感觉有点像读书心得,不过是11年前的用在Win 7的,但比笔...

[想试试看JavaScript ] 变数

写程序的目的,就是希望程序可以自动帮我们处理资料并且计算成果出来。 所以我们期待的运行流程就是 输入...

【PHP Telegram Bot】Day26 - 入群欢迎机器人(2):设定欢迎讯息

如果欢迎讯息写死在程序里,临时想换还要把程序打开来改,改完还要测试,不如就直接让它能在群组里设定吧...

【设计+切版30天实作】|Day13 - [设计进阶挑战] 把原本Plans的背景图形改成特殊形状

设计大纲 昨天设计的「方案」区块的背景设计是单纯一个长方形+背景颜色+阴影。今天想来做点不一样的,所...