Utiliser l’API REST Azure avec Azure CLI

Les API REST (Representational State Transfer) sont des points de terminaison de service qui prennent en charge différents ensembles d’opérations HTTP (ou méthodes). Ces méthodes HTTP vous permettent d’effectuer différentes actions pour les ressources de votre service. La az rest commande ne doit être utilisée que lorsqu’une commande Azure CLI existante n’est pas disponible.

Une fois cet article terminé, vous savez comment utiliser les requêtes HTTP PUT, PATCH, GET, POST et DELETE pour gérer les ressources Azure Container Registry. Azure Container Registry est un service de registre managé qui vous permet de créer et de gérer des registres de conteneurs Azure qui stockent des images conteneur et des artefacts associés.

Prérequis

Configurez votre demande d’API REST Azure personnalisée :

Pour appeler une demande d’API REST Azure personnalisée avec Azure CLI, utilisez la az rest commande, suivie du --url paramètre. Le --url paramètre définit l’URL de la ressource demandée et est le seul paramètre requis.

Remarque

  • La az rest commande s’authentifie automatiquement à l’aide des informations d’identification de connexion. Si l’en-tête d’autorisation n’est pas défini, il joint l’en-tête Authorization: Bearer <token>, où <token> il est récupéré à partir de l’ID Microsoft Entra. La ressource cible du jeton est dérivée du --url paramètre lorsque le --url paramètre commence par un point de terminaison à partir de la sortie de la az cloud show --query endpoints commande. Utilisez le paramètre d’une --resource ressource personnalisée.
  • Si l’en-tête Content-Type n’est pas défini et --body qu’il s’agit d’une chaîne JSON valide, l’en-tête Content-Type est défini par défaut sur « application/json ».

Utiliser PUT pour créer un Registre de conteneurs Azure

Utilisez la méthode PUT HTTP pour créer un registre de conteneurs 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>'}}"

Voici un exemple avec les paramètres terminés :

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

Sortie JSON pour Bash et 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"
}

Vous avez maintenant créé votre nouveau Registre de conteneurs Azure à l’aide az restde !

Utiliser PATCH pour mettre à jour votre Registre de conteneurs Azure

Mettez à jour votre Registre de conteneurs Azure à l’aide de la requête HTTP PATCH. Modifiez le --body paramètre avec les propriétés que vous souhaitez mettre à jour. Cet exemple utilise les variables définies dans la section précédente et met à jour le nom de la référence SKU ($skuName="Premium ») d’Azure Container Registry.

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

La sortie du dictionnaire JSON suivante comporte des champs omis pour la concision :

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

Utiliser GET pour récupérer votre Registre de conteneurs Azure

Utilisez la requête GET HTTP pour afficher les résultats de mise à jour de la requête PATCH. Cet exemple utilise les variables définies dans la section précédente.

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

La sortie de la méthode GET est la même que celle indiquée pour PUT.

Utiliser POST pour régénérer vos informations d’identification Azure Container Registry

Utilisez la requête HTTP POST pour régénérer l’une des informations d’identification de connexion pour Azure Container Registry créée dans cet article.

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

La sortie du dictionnaire JSON suivante comporte des champs omis pour la concision :

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

Une fois la demande terminée, vos informations d’identification Azure Container Registry spécifiées seront régénérées avec un nouveau mot de passe, ainsi que votre mot de passe existant (mot de passe2).

Utiliser DELETE pour supprimer votre Registre de conteneurs Azure

Utilisez la requête DELETE HTTP pour supprimer un Registre de conteneurs Azure existant.

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

Nettoyer les ressources

Une fois les ressources créées dans cet article, vous pouvez supprimer le groupe de ressources. Lorsque vous supprimez le groupe de ressources, toutes les ressources de ce groupe de ressources sont supprimées.

az group delete --resource-group <resourceGroupName>