iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 28
0
Microsoft Azure

深入 Azure 雲端服務系列 第 14

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 跟使用方式,很方便。


上一篇
Azure Retail Prices REST API 分析全 Azure 服務價格差異 - JSON 轉 Excel版本
下一篇
Azure 管理資源方式比較差異
系列文
深入 Azure 雲端服務15

尚未有邦友留言

立即登入留言