Azure CLI で Azure REST API を使用する

Representational State Transfer (REST) API は、さまざまな HTTP 操作 (またはメソッド) のセットをサポートするサービス エンドポイントです。 これらの HTTP メソッドを使用すると、サービスのリソースに対してさまざまなアクションを実行できます。 az rest コマンドは、既存の Azure CLI コマンドを使用できない場合にのみ使用してください。

この記事では、Azure Container Registry リソースを管理するための PUT、PATCH、GET、POST、DELETE HTTP 要求について説明します。 Azure Container Registry は、コンテナー イメージと関連する成果物を格納する 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 を実行します。

使用に関するヒント az rest

az rest を使用する場合に役立つ情報を次に示します

  • az rest コマンドは、ログインした資格情報を使用して自動的に認証します。
  • Authorization ヘッダーが設定されていない場合は、ヘッダー Authorization: Bearer <token>がアタッチされます。ここで、 <token>Microsoft Entra ID から取得されます。
  • トークンのターゲット リソースは、--url パラメーターが az cloud show --query endpoints コマンドの出力からのエンドポイントで始まるときに、--url パラメーターから派生します。 --url パラメーターが必要です。
  • カスタム リソースの --resource パラメーターを使用します。
  • Content-Type ヘッダーが設定されておらず、 --body が有効な JSON 文字列である場合、Content-Type ヘッダーは既定で "application/json" になります。
  • OData の形式で要求に--uri-parametersを使用する場合は、Bash\$として$をエスケープし、PowerShellでは `$として$をエスケープするなど、さまざまな環境で$をエスケープしてください。

PUT を使用して Azure Container Registry を作成する

PUT HTTP メソッドを使用して、新しい Azure Container Registry を作成します。

# 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 Container Registry を更新する

PATCH HTTP 要求を使用して Azure Container Registry を更新します。 更新するプロパティを使用して、 --body パラメーターを編集します。 この例では、前のセクションで設定した変数を使用し、Azure Container Registry の 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 Container Registry を取得する

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 Container Registry 資格情報を再生成する

POST HTTP 要求を使用して、この記事で作成した Azure Container Registry のログイン資格情報のいずれかを再生成します。

# 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 Container Registry 資格情報が、既存のパスワード (password2) と共に新しいパスワードで再生成されます。

DELETE を使用して Azure Container Registry を削除する

DELETE HTTP 要求を使用して、既存の Azure Container Registry を削除します。

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 Graph 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>

関連項目