你当前正在访问 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 Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
设置自定义 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>