你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 Azure REST API 与 Azure CLI 配合使用

表示性状态传输(REST)API 是支持不同 HTTP 操作集(或方法)的服务终结点。 这些 HTTP 方法允许你对服务的资源执行不同的操作。 az rest仅当现有 Azure CLI 命令不可用时,才应使用该命令

完成本文后,你将了解如何使用 PUT、PATCH、GET、POST 和 DELETE HTTP 请求来管理Azure 容器注册表资源。 Azure 容器注册表是一种托管注册表服务,可用于创建和维护存储容器映像和相关项目的 Azure 容器注册表。

先决条件

设置自定义 Azure REST API 请求:

若要使用 Azure CLI 调用自定义 Azure REST API 请求,请使用 az rest 命令,后跟 --url 参数。 该 --url 参数定义所请求资源的 URL,并且是唯一必需的参数。

注意

  • az rest 命令使用登录凭据自动进行身份验证。 如果未设置 Authorization 标头,则会附加标头,从 Microsoft Entra ID 检索到该<token>标头Authorization: Bearer <token>。 当参数从命令输出az cloud show --query endpoints中的终结点开始时--url,令牌的目标资源将从参数派生--url。 对 --resource 自定义资源使用参数。
  • 如果未设置 Content-Type 标头并且 --body 是有效的 JSON 字符串,则 Content-Type 标头将默认为“application/json”。

使用 PUT 创建Azure 容器注册表

使用 PUT HTTP 方法创建新的Azure 容器注册表。

# 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 容器注册表!

使用 PATCH 更新Azure 容器注册表

使用 PATCH HTTP 请求更新Azure 容器注册表。 使用 --body 要更新的属性编辑参数。 此示例使用上一部分中设置的变量,并更新Azure 容器注册表的 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 容器注册表

使用 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 容器注册表凭据

使用 POST HTTP 请求重新生成本文中创建Azure 容器注册表的登录凭据之一。

# 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 容器注册表凭据将与现有密码(password2)一起重新生成新的密码。

使用 DELETE 删除Azure 容器注册表

使用 DELETE HTTP 请求删除现有Azure 容器注册表。

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>