次の方法で共有


ARM テンプレートと Azure Resource Manager REST API を使用してリソースをデプロイする

この記事では、Azure Resource Manager REST API と Azure Resource Manager テンプレート (ARM テンプレート) を使用して、リソースを Azure にデプロイする方法について説明します。

要求本文にテンプレートを含めるか、ファイルへのリンクを含めることができます。 ファイルを使用する場合は、ローカル ファイルまたは URI で使用できる外部ファイルを指定できます。 テンプレートがストレージ アカウント内にある場合は、テンプレートへのアクセスを制限し、デプロイ時に Shared Access Signature (SAS) トークンを提供できます。

必要なアクセス許可

Bicep ファイルまたは ARM テンプレートをデプロイするには、デプロイ対象のリソースに対する書き込みアクセス権が必要であり、さらに、Microsoft.Resources/deployments リソース タイプでのすべての操作に対するアクセス権が必要です。 たとえば、仮想マシンをデプロイするには、Microsoft.Compute/virtualMachines/write および Microsoft.Resources/deployments/* アクセス許可が必要です。 What-If 操作のアクセス許可要件も同じです。

ロールとアクセス許可の一覧については、Azure の組み込みロールに関するページを参照してください。

デプロイのスコープ

デプロイの対象は、リソース グループ、Azure サブスクリプション、管理グループ、またはテナントです。 使用するコマンドは、デプロイのスコープに応じて異なります。

この記事の例では、リソース グループのデプロイを使用します。

REST API を使用したデプロイ

  1. 認証トークンを含む 一般的なパラメーターとヘッダーを設定します。

  2. 存在しないリソース グループにデプロイする場合、リソース グループを作成する必要があります。 サブスクリプション ID、新しいリソース グループの名前、ソリューションに必要な場所を指定します。 詳細については、「リソース グループの作成」を参照してください。

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
    

    次のような要求本文を使用します。

    {
     "___location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. テンプレートをデプロイする前に、テンプレートが環境に与える変更をプレビューすることができます。 what-if 操作を使用して、テンプレートが期待する変更を行うことを確認します。 What-if はまた、テンプレートのエラーも検証します。

  4. テンプレートをデプロイするには、サブスクリプション ID、リソース グループの名前、要求 URI 内のデプロイの名前を指定します。

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2020-10-01
    

    要求本文で、テンプレートとパラメーター ファイルへのリンクを指定します。 パラメーター ファイルの詳細については、「 Resource Manager パラメーター ファイルの作成」を参照してください。

    mode[増分] に設定されていることに注意してください。 完全なデプロイを実行するには、 mode[完了] に設定します。 完全モードを使用する場合は、テンプレートに含まれていないリソースを誤って削除する可能性があります。

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental"
     }
    }
    

    応答コンテンツ、要求コンテンツ、またはその両方をログに記録する場合は、要求に debugSetting を含めます。

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental",
       "debugSetting": {
         "detailLevel": "requestContent, responseContent"
       }
     }
    }
    

    Shared Access Signature (SAS) トークンを使用するようにストレージ アカウントを設定できます。 詳細については、Shared Access Signature (SAS) を使用したアクセスの委任に関するページを参照してください。

    パラメーターに機密性の高い値 (パスワードなど) を指定する必要がある場合は、その値をキー コンテナーに追加します。 前の例に示すように、デプロイ時にキーボールトを取得します。 詳細については、「 デプロイ時に Azure Key Vault を使用してセキュリティで保護されたパラメーター値を渡す」を参照してください。

  5. テンプレートとパラメーターのファイルにリンクする代わりに、要求本文に含めることができます。 次の例は、テンプレートとパラメーターをインラインで含む要求本文を示しています。

    {
       "properties": {
       "mode": "Incremental",
       "template": {
         "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
         "contentVersion": "1.0.0.0",
         "parameters": {
           "storageAccountType": {
             "type": "string",
             "defaultValue": "Standard_LRS",
             "allowedValues": [
               "Standard_LRS",
               "Standard_GRS",
               "Standard_ZRS",
               "Premium_LRS"
             ],
             "metadata": {
               "description": "Storage Account type"
             }
           },
           "___location": {
             "type": "string",
             "defaultValue": "[resourceGroup().___location]",
             "metadata": {
               "description": "Location for all resources."
             }
           }
         },
         "variables": {
           "storageAccountName": "[format('{0}standardsa', uniquestring(resourceGroup().id))]"
         },
         "resources": [
           {
             "type": "Microsoft.Storage/storageAccounts",
             "apiVersion": "2022-09-01",
             "name": "[variables('storageAccountName')]",
             "___location": "[parameters('___location')]",
             "sku": {
               "name": "[parameters('storageAccountType')]"
             },
             "kind": "StorageV2",
             "properties": {}
           }
         ],
         "outputs": {
           "storageAccountName": {
             "type": "string",
             "value": "[variables('storageAccountName')]"
           }
         }
       },
       "parameters": {
         "___location": {
           "value": "eastus2"
         }
       }
     }
    }
    
  6. テンプレートのデプロイの状態を取得するには、 デプロイ - 取得を使用します。

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
    

ARMClient を使用したデプロイ

ARMClient は、Azure Resource Manager API を呼び出す簡単なコマンド ライン ツールです。 ツールをインストールするには、ARMClient を参照してください。

サブスクリプションを一覧表示するには:

armclient GET /subscriptions?api-version=2021-04-01

リソース グループを一覧表示するには:

armclient GET /subscriptions/<subscription-id>/resourceGroups?api-version=2021-04-01

<subscription-id> を Azure サブスクリプション ID に置き換えます。

米国中部リージョンにリソース グループを作成するには:

armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01  "{___location: 'central us', properties: {}}"

または、 CreateRg.jsonという JSON ファイルに本文を配置することもできます。

{
  "___location": "Central US",
  "properties": { }
}
armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01 '@CreateRg.json'

詳細については、「 ARMClient: Azure API のコマンド ライン ツール」を参照してください。

デプロイメント名

デプロイには、 ExampleDeploymentなどの名前を付けることができます。

デプロイを実行するたびに、リソース グループのデプロイ履歴にデプロイ名のエントリが追加されます。 別のデプロイを実行するときに同じ名前を付けると、現在のデプロイによって前のエントリが置き換えられます。 デプロイ履歴に一意のエントリを保持する場合は、デプロイごとに一意の名前を付けます。

一意の名前を作成するために、ランダムな数値を割り当てることができます。 または、日付の値を追加します。

同じリソース グループに対して同じ名前のデプロイを同時に実行した場合は、最後のデプロイのみが完了します。 完了していない同じ名前のデプロイは、最後のデプロイによって置き換えられます。 たとえば、newStorage という名前のストレージ アカウントをデプロイする storage1 という名前のデプロイを実行し、newStorage という名前のストレージ アカウントをデプロイする storage2 という名前の別のデプロイを同時に実行した場合は、1 つのストレージ アカウントのみがデプロイされます。 結果のストレージ アカウントの名前は storage2 になります。

ただし、newStorage という名前のストレージ アカウントをデプロイする storage1 という名前のデプロイを実行し、その完了直後に、newStorage という名前のストレージ アカウントをデプロイする storage2 という名前の別のデプロイを実行した場合は、ストレージ アカウントは 2 つになります。 1 つは storage1 という名前に、もう 1 つは storage2 という名前になります。 ただし、デプロイ履歴にはエントリが 1 つだけ存在します。

デプロイごとに一意の名前を指定すると、競合なしでそれらを同時に実行できます。 newStorage1 という名前のストレージ アカウントをデプロイする storage1 という名前のデプロイを実行し、newStorage2 という名前のストレージ アカウントをデプロイする storage2 という名前の別のデプロイを同時に実行した場合は、2 つのストレージ アカウントがデプロイされ、デプロイ履歴には 2 つのエントリが存在します。

同時デプロイによる競合を回避し、デプロイ履歴に一意のエントリが確実に存在するようにするには、各デプロイに一意の名前を付けます。

次のステップ