将 Azure REST API 与 Azure CLI 配合使用

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

本文演示了用于管理 Azure 容器注册表资源的 PUT、PATCH、GET、POST 和 DELETE HTTP 请求。 Azure 容器注册表是一项托管注册表服务,可用于创建和维护存储容器映像和相关项目的 Azure 容器注册表。

先决条件

使用az rest的技巧

下面是使用 az rest 时的一些有用信息:

  • az rest 命令使用登录凭据自动进行身份验证。
  • 如果未设置 Authorization 标头,则会附加标头Authorization: Bearer <token>,其中<token>是从Microsoft Entra ID中检索的。
  • 令牌的目标资源将从--url参数派生,当--url参数以az cloud show --query endpoints命令输出的终结点开始时。 --url 是必需的参数。
  • 使用 --resource 参数来定义自定义资源。
  • 如果未设置 Content-Type 标头并且 --body 是有效的 JSON 字符串,则 Content-Type 标头将默认为“application/json”。
  • 使用 --uri-parameters 形式的 OData 请求时,请确保在不同的环境中进行转义:在$中,将Bash转义为$;而在\$中,将PowerShell转义为$

使用 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"
}

使用 PATCH 更新 Azure 容器注册表

使用 PATCH HTTP 请求更新 Azure 容器注册表。 编辑 --body 参数,设置要更新的属性。 此示例使用上一部分中设置的变量,并更新 Azure 容器注册表的 SKU 名称($skuName=“Premium”)。

#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>"
}

请求完成后,将使用新密码以及现有密码(password2)重新生成指定的 Azure 容器注册表凭据。

使用 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

Microsoft Graph 的其他 az rest 示例

有时,它有助于查看不同方案的示例,因此下面是使用 Microsoft 图形 API 的示例。 若要更新 应用程序的重定向 URI,请调用 更新应用程序 REST API,如以下代码所示:

# Get the application
az rest --method GET \
    --uri 'https://graph.microsoft.com/v1.0/applications/b4e4d2ab-e2cb-45d5-a31a-98eb3f364001'

# Update `redirectUris` for `web` property
az rest --method PATCH \
    --uri 'https://graph.microsoft.com/v1.0/applications/b4e4d2ab-e2cb-45d5-a31a-98eb3f364001' \
    --body '{"web":{"redirectUris":["https://myapp.com"]}}'

清理资源

完成本文中创建的资源后,可以删除资源组。 删除资源组时,将删除该资源组中的所有资源。

az group delete --resource-group <resourceGroupName>

另请参阅