Usar a API REST do Azure com a CLI do Azure

APIs de Transferência de Estado Representacional (REST) são pontos de extremidade de serviço que oferecem suporte a diferentes conjuntos de operações (ou métodos) HTTP. Esses métodos HTTP permitem que você execute ações diferentes para os recursos do serviço. O az rest comando só deve ser usado quando um comando existente da CLI do Azure não estiver disponível.

Este artigo demonstra as solicitações PUT, PATCH, GET, POST e DELETE HTTP para gerenciar recursos do Registro de Contêiner do Azure. O Registro de Contêiner do Azure é um serviço de registro gerenciado que permite criar e manter registros de contêiner do Azure que armazenam imagens de contêiner e artefatos relacionados.

Pré-requisitos

Dicas para usar az rest

Aqui estão algumas informações úteis ao trabalhar com az rest:

  • O az rest comando autentica automaticamente usando a credencial conectada.
  • Se o cabeçalho Authorization não estiver definido, ele anexará o cabeçalho Authorization: Bearer <token>, onde <token> será recuperado da ID do Microsoft Entra.
  • O recurso de destino do token será derivado do --url parâmetro quando o --url parâmetro começar com um ponto de extremidade da saída do az cloud show --query endpoints comando. O --url parâmetro required.
  • Use o --resource parâmetro para um recurso personalizado.
  • Se o cabeçalho Content-Type não estiver definido e --body for uma cadeia de caracteres JSON válida, o cabeçalho Content-Type assumirá como padrão "application/json".
  • Ao usar --uri-parameters para solicitações na forma de OData, certifique-se de escapar $ em diferentes ambientes: em Bash, escape $ como \$ e em PowerShell, escape $ como `$.

Usar PUT para criar um Registro de Contêiner do Azure

Use o método HTTP PUT para criar um novo Registro de Contêiner do 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>'}}"

Aqui está um exemplo com parâmetros concluídos:

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

Saída JSON para Bash e Powershell:

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

Usar o PATCH para atualizar o Registro de Contêiner do Azure

Atualize seu Registro de Contêiner do Azure usando a solicitação HTTP PATCH. Edite o --body parâmetro com as propriedades que você deseja atualizar. Este exemplo usa as variáveis definidas na seção anterior e atualiza o nome da SKU ($skuName="Premium") do Registro de Contêiner do Azure.

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

A saída do dicionário JSON a seguir tem campos omitidos por brevidade:

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

Use GET para recuperar seu Registro de Contêiner do Azure

Use a solicitação HTTP GET, veja os resultados da atualização da solicitação PATCH. Este exemplo usa as variáveis definidas na seção anterior.

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

A saída para o método GET é a mesma que a mostrada para PUT.

Usar o POST para gerar novamente suas credenciais do Registro de Contêiner do Azure

Use a solicitação HTTP POST para gerar novamente uma das credenciais de logon para o Registro de Contêiner do Azure criado neste artigo.

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

A saída do dicionário JSON a seguir tem campos omitidos por brevidade:

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

Depois que a solicitação for concluída, suas credenciais especificadas do Registro de Contêiner do Azure serão regeneradas com uma nova senha junto com sua senha existente (senha2).

Usar DELETE para excluir seu Registro de Contêiner do Azure

Use a solicitação HTTP DELETE para excluir um Registro de Contêiner do Azure existente.

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

Exemplo adicional az rest para o Microsoft Graph

Às vezes, é útil ver um exemplo para um cenário diferente, então aqui está um exemplo que usa a API do Microsoft Graph. Para atualizar os URIs de redirecionamento de um Aplicativo, chamamos a API REST Atualizar aplicativo, como neste código:

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

Limpar os recursos

Quando terminar os recursos criados neste artigo, você poderá excluir o grupo de recursos. Quando você exclui o grupo de recursos, todos os recursos nesse grupo de recursos são excluídos.

az group delete --resource-group <resourceGroupName>

Confira também