搭配 Azure CLI 使用 Azure REST API

表示式狀態傳輸 (REST) API 是支援不同 HTTP 作業集(或方法)的服務端點。 這些 HTTP 方法可讓您針對服務的資源執行不同的動作。 az rest只有在現有的 Azure CLI 命令無法使用時,才應該使用命令

本文完成後,您將瞭解如何使用 PUT、PATCH、GET、POST 和 DELETE HTTP 要求來管理 Azure Container Registry 資源。 Azure Container Registry 是受控登錄服務,可讓您建立和維護儲存容器映射和相關成品的 Azure 容器登錄。

必要條件

設定您的自訂 Azure REST API 要求:

若要使用 Azure CLI 叫用自定義 Azure REST API 要求,請使用 az rest 命令,後面接著 --url 參數。 參數 --url 會定義所要求資源的 URL,而且是唯一的必要參數。

注意

  • az rest命令會自動使用登入認證進行驗證。 如果未設定 Authorization 標頭,則會附加標頭 Authorization: Bearer <token>,其中 <token> 會從 Microsoft Entra ID 擷取。 當參數從命令輸出az cloud show --query endpoints的端點開始時--url,令牌的目標資源會衍生自 --url 參數。 --resource針對自訂資源使用 參數。
  • 如果未設定 Content-Type 標頭,而且 --body 是有效的 JSON 字串,Content-Type 標頭會預設為 “application/json”。

使用 PUT 建立 Azure Container Registry

使用 PUT HTTP 方法來建立新的 Azure Container Registry。

# Command format example
az rest --method put \
    --url https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ContainerRegistry/registries/<containerRegistryName>?api-version=2023-01-01-preview \
    --body "{'location': '<locationName>', 'sku': {'name': '<skuName>'}, 'properties': {'adminUserEnabled': '<propertyValue>'}}"

以下是具有已完成參數的範例:

# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
subscriptionId="00000000-0000-0000-0000-000000000000"
resourceGroup="msdocs-app-rg$randomIdentifier"
containerRegistryName="msdocscr$randomIdentifier"
locationName="westus"
skuName="Standard"
propertyValue="true"

# Create resource group
az group create --name $resourceGroup --location $locationName --output json

# Invoke request
az rest --method put \
    --url https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.ContainerRegistry/registries/$containerRegistryName?api-version=2023-01-01-preview \
    --body "{'location': '$locationName', 'sku': {'name': '$skuName'}, 'properties': {'adminUserEnabled': '$propertyValue'}}"

Bash 和 Powershell 的 JSON 輸出:

{
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ContainerRegistry/registries/<containerRegistryName>",
  "location": "<location>",
  "name": "<containerRegistryName>",
  "properties": {
    "adminUserEnabled": true,
    "anonymousPullEnabled": false,
    "creationDate": "2024-01-03T18:38:36.7089583Z",
    "dataEndpointEnabled": false,
    "dataEndpointHostNames": [],
    "encryption": {
      "status": "disabled"
    },
    "loginServer": "<containerRegistryName>.azurecr.io",
    "networkRuleBypassOptions": "AzureServices",
    "policies": {
      "azureADAuthenticationAsArmPolicy": {
        "status": "enabled"
      },
      "exportPolicy": {
        "status": "enabled"
      },
      "quarantinePolicy": {
        "status": "disabled"
      },
      "retentionPolicy": {
        "days": 7,
        "lastUpdatedTime": "2024-01-03T19:44:53.9770581+00:00",
        "status": "disabled"
      },
      "softDeletePolicy": {
        "lastUpdatedTime": "2024-01-03T19:44:53.9771117+00:00",
        "retentionDays": 7,
        "status": "disabled"
      },
      "trustPolicy": {
        "status": "disabled",
        "type": "Notary"
      }
    },
    "privateEndpointConnections": [],
    "provisioningState": "Succeeded",
    "publicNetworkAccess": "Enabled",
    "zoneRedundancy": "Disabled"
  },
  "sku": {
    "name": "Standard",
    "tier": "Standard"
  },
  "systemData": {
    "createdAt": "2024-01-03T18:38:36.7089583+00:00",
    "createdBy": "<username>@microsoft.com",
    "createdByType": "User",
    "lastModifiedAt": "2024-01-03T19:44:53.684342+00:00",
    "lastModifiedBy": "<username>@microsoft.com",
    "lastModifiedByType": "User"
  },
  "tags":{},
  "type": "Microsoft.ContainerRegistry/registries"
}

您現在已使用 az rest成功建立新的 Azure Container Registry!

使用 PATCH 更新您的 Azure Container Registry

使用 PATCH HTTP 要求更新您的 Azure Container Registry。 使用 --body 您要更新的屬性來編輯 參數。 此範例會使用上一節中設定的變數,並更新 Azure Container Registry 的 SKU 名稱($skuName=“進階版”。

#Variable Block
$skuName="Premium"

az rest --method patch \
    --url https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.ContainerRegistry/registries/$containerRegistryName?api-version=2023-01-01-preview \
    --body "{'location': '$locationName', 'sku': {'name': '$skuName'}, 'properties': {'adminUserEnabled': '$propertyValue'}}"

下列 JSON 字典輸出有省略的欄位,以求簡潔:

{
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ContainerRegistry/registries/<containerRegistryName>",
  "location": "westus",
  "name": "<containerRegistryName>",
  "properties": {...},
  "sku": {
    "name": "Premium",
    "tier": "Premium"
  },
  "systemData": {...},
  "type": "Microsoft.ContainerRegistry/registries"
}

使用 GET 擷取您的 Azure Container Registry

使用 GET HTTP 要求,請參閱 PATCH 要求的更新結果。 此範例會使用上一節中設定的變數。

az rest --method get \
    --url https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.ContainerRegistry/registries/$containerRegistryName?api-version=2023-01-01-preview 

GET 方法的輸出與 PUT 所示的輸出相同。

使用 POST 重新產生 Azure Container Registry 認證

使用 POST HTTP 要求,針對本文中建立的 Azure Container Registry 重新產生其中一個登入認證。

# Variable block
$passwordValue="password"

az rest --method post \
    --url https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.ContainerRegistry/registries/$containerRegistryName/regenerateCredential?api-version=2023-01-01-preview \
    --body "{'name': '$passwordValue'}"

下列 JSON 字典輸出有省略的欄位,以求簡潔:

{
  "passwords": [
    {
      "name": "password",
      "value": "<passwordValue>"
    },
    {
      "name": "password2",
      "value": "<passwordValue2>"
    }
  ],
  "username": "<containerRegistryName>"
}

要求完成之後,您的指定 Azure Container Registry 認證會連同您現有的密碼 (password2) 一起重新產生新的密碼。

使用 DELETE 刪除您的 Azure Container Registry

使用 DELETE HTTP 要求來刪除現有的 Azure Container Registry。

az rest --method delete \
    --url https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.ContainerRegistry/registries/$containerRegistryName?api-version=2023-01-01-preview

清除資源

當您完成本文中建立的資源時,您可以刪除資源群組。 當您刪除資源群組時,會刪除該資源群組中的所有資源。

az group delete --resource-group <resourceGroupName>