为何 Azure CLI / SDK / Portal / PowerShell 的行为可以一致,背後的逻辑其实就是 Azure REST API。
可以用 chrome dev tool 查看 Azure Cloud Shell,能发现使用许多 Azure Restful API
用 Azure CLI 搭配 --debug
option 做验证,能发现底层也都是 TCP 的 Restful API 传输
az group list --debug
最简单方式,使用 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]
第二步 : 因为 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
第三步 : 使用 az account list --output table --query '[].{Name:name, SubscriptionId:id}'
找到 SubscriptionId
第四部 : 使用 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
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网页框架开发入门
while 常见用法如下: //while count = 1 while count<=5:...
最近去图书馆借的登录档的参考书终於到了,感觉有点像读书心得,不过是11年前的用在Win 7的,但比笔...
写程序的目的,就是希望程序可以自动帮我们处理资料并且计算成果出来。 所以我们期待的运行流程就是 输入...
如果欢迎讯息写死在程序里,临时想换还要把程序打开来改,改完还要测试,不如就直接让它能在群组里设定吧...
设计大纲 昨天设计的「方案」区块的背景设计是单纯一个长方形+背景颜色+阴影。今天想来做点不一样的,所...