Resource Manager テンプレートと Resource Manager REST API を使用したリソースのデプロイDeploy resources with Resource Manager templates and Resource Manager REST API

この記事では、Resource Manager REST API と Resource Manager テンプレートを使用して Azure にリソースをデプロイする方法について説明します。This article explains how to use the Resource Manager REST API with Resource Manager templates to deploy your resources to Azure.

テンプレートは要求本文またはファイルへのリンクに含めることができます。You can either include your template in the request body or link to a file. ファイルを使用する場合は、ローカル ファイルまたは URI を通じてアクセスできる外部ファイルを使用できます。When using a file, it can be a local file or an external file that is available through a URI. テンプレートがストレージ アカウントにある場合は、テンプレートへのアクセスを制限し、デプロイ時に Shared Access Signature (SAS) トークンを設定できます。When your template is in a storage account, you can restrict access to the template and provide a shared access signature (SAS) token during deployment.

デプロイのスコープDeployment scope

管理グループ、Azure サブスクリプション、またはリソース グループをデプロイの対象として指定できます。You can target your deployment to a management group, an Azure subscription, or a resource group. 多くの場合、リソース グループをデプロイの対象にします。In most cases, you'll target deployments to a resource group. 管理グループまたはサブスクリプションのデプロイを使用するのは、指定したスコープ全体にポリシーとロールの割り当てを適用するときです。Use management group or subscription deployments to apply policies and role assignments across the specified scope. また、リソース グループを作成し、それにリソースをデプロイする場合も、サブスクリプション デプロイを使用します。You also use subscription deployments to create a resource group and deploy resources to it. 使用するコマンドは、デプロイのスコープに応じて異なります。Depending on the scope of the deployment, you use different commands.

リソース グループにデプロイするには、デプロイ - 作成に関するページのコマンドを使用します。To deploy to a resource group, use Deployments - Create. 要求は以下に送信されます。The request is sent to:

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

サブスクリプションにデプロイするには、デプロイ - サブスクリプション スコープで作成に関するページのコマンドを使用します。To deploy to a subscription, use Deployments - Create At Subscription Scope. 要求は以下に送信されます。The request is sent to:

PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2019-05-01

管理グループにデプロイするには、デプロイ - 管理グループ スコープで作成に関するページを参照してください。To deploy to a management group, use Deployments - Create At Management Group Scope. 要求は以下に送信されます。The request is sent to:

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{groupId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2019-05-01

この記事の例では、リソース グループ デプロイを使用します。The examples in this article use resource group deployments. サブスクリプション デプロイの詳細については、「サブスクリプション レベルでリソース グループとリソースを作成する」を参照してください。For more information about subscription deployments, see Create resource groups and resources at the subscription level.

REST API でデプロイするDeploy with the REST API

  1. 一般的なパラメーターおよびヘッダー (認証トークンを含む) を設定します。Set common parameters and headers, including authentication tokens.

  2. 既存のリソース グループがない場合は、リソース グループを作成します。If you don't have an existing resource group, create a resource group. ソリューションに必要なサブスクリプション ID、新しいリソース グループの名前、場所を指定します。Provide your subscription ID, the name of the new resource group, and location that you need for your solution. 詳細については、「リソース グループの作成」を参照してください。For more information, see Create a resource group.

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

    次のような要求本文を使用します。With a request body like:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. テンプレート デプロイを検証する操作を実行して、デプロイを実行する前に検証します。Validate your deployment before executing it by running the Validate a template deployment operation. デプロイをテストする場合、(次の手順で示すように) デプロイの実行時に必要なパラメーターを正確に指定します。When testing the deployment, provide parameters exactly as you would when executing the deployment (shown in the next step).

  4. テンプレートをデプロイするには、要求 URI にサブスクリプション ID、リソース グループの名前、デプロイの名前を指定します。To deploy a template, provide your subscription ID, the name of the resource group, the name of the deployment in the request URI.

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

    要求の本文に、テンプレートとパラメーター ファイルへのリンクを指定します。In the request body, provide a link to your template and parameter file. [モード][増分] に設定されていることに注意してください。Notice the mode is set to Incremental. 完全デプロイメントを実行するには、 [モード][完全] に設定します。To run a complete deployment, set mode to Complete. テンプレートにないリソースを誤って削除する可能性があるため、完全モードを使用する際は注意してください。Be careful when using the complete mode as you can inadvertently delete resources that aren't in your template.

    {
     "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 を含めます。If you want to log response content, request content, or both, include debugSetting in the request.

    {
     "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) トークンを使用することができます。You can set up your storage account to use a shared access signature (SAS) token. 詳細については、「Delegating Access with a Shared Access Signature (Shared Access Signature を使用したアクセスの委任)」を参照してください。For more information, see Delegating Access with a Shared Access Signature.

  5. テンプレートとパラメーターのファイルにリンクするのではなく、それらを要求本文に含めることができます。Instead of linking to files for the template and parameters, you can include them in the request body. 次の例は、テンプレートとパラメーターをインラインにした要求の本文を示しています。The following example shows the request body with the template and parameter inline:

    {
       "properties": {
       "mode": "Incremental",
       "template": {
         "$schema": "https://schema.management.azure.com/schemas/2015-01-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": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
         },
         "resources": [
           {
             "type": "Microsoft.Storage/storageAccounts",
             "name": "[variables('storageAccountName')]",
             "apiVersion": "2018-02-01",
             "location": "[parameters('location')]",
             "sku": {
               "name": "[parameters('storageAccountType')]"
             },
             "kind": "StorageV2",
             "properties": {}
           }
         ],
         "outputs": {
           "storageAccountName": {
             "type": "string",
             "value": "[variables('storageAccountName')]"
           }
         }
       },
       "parameters": {
         "location": {
           "value": "eastus2"
         }
       }
     }
    }
    
  6. テンプレートのデプロイの状態を取得するには、デプロイ - 取得に関するページを参照してください。To get the status of the template deployment, use Deployments - Get.

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

デプロイに失敗したときに再デプロイするRedeploy when deployment fails

この機能は、"エラー時のロールバック" とも呼ばれます。This feature is also known as Rollback on error. デプロイに失敗した場合、デプロイ履歴から以前に成功したデプロイを自動的に再デプロイすることができます。When a deployment fails, you can automatically redeploy an earlier, successful deployment from your deployment history. 再デプロイを指定するには、要求本文内で onErrorDeployment プロパティを使用します。To specify redeployment, use the onErrorDeployment property in the request body. この機能は、インフラストラクチャのデプロイに関して既知の正常な状態があって、その状態に戻したい場合に便利です。This functionality is useful if you've got a known good state for your infrastructure deployment and want to revert to this state. いくつかの注意事項と制限があります。There are a number of caveats and restrictions:

  • 再デプロイは、以前に実行されたときとまったく同じパラメーターで実行されます。The redeployment is run exactly as it was run previously with the same parameters. パラメーターを変更することはできません。You cannot change the parameters.
  • 以前のデプロイは、完全モードを使用して実行されます。The previous deployment is run using the complete mode. 以前のデプロイに含まれていなかったリソースはすべて削除され、すべてのリソースの構成は以前の状態に設定されます。Any resources not included in the previous deployment are deleted, and any resource configurations are set to their previous state. デプロイ モードを完全に理解しておいてください。Make sure you fully understand the deployment modes.
  • 再デプロイではリソースのみが影響を受け、データの変更には影響ありません。The redeployment only affects the resources, any data changes aren't affected.
  • この機能は、リソース グループのデプロイにおいてのみサポートされ、サブスクリプション レベルのデプロイではサポートされません。This feature is only supported on Resource Group deployments, not subscription level deployments. サブスクリプション レベル デプロイについて詳しくは、「サブスクリプション レベルでリソース グループとリソースを作成する」をご覧ください。For more information about subscription level deployment, see Create resource groups and resources at the subscription level.

このオプションを使用するには、ご自身のデプロイを履歴で特定できるように、デプロイの名前は一意でなければなりません。To use this option, your deployments must have unique names so they can be identified in the history. 一意の名前が付いていないと、失敗した現在のデプロイによって、履歴にある以前の成功したデプロイが上書きされる可能性があります。If you don't have unique names, the current failed deployment might overwrite the previously successful deployment in the history. このオプションは、ルート レベルのデプロイでのみ使用できます。You can only use this option with root level deployments. 入れ子になったテンプレートのデプロイを再デプロイに使用することはできません。Deployments from a nested template aren't available for redeployment.

現在のデプロイが失敗した場合、前回の成功したデプロイを再デプロイするには、次を使用します。To redeploy the last successful deployment if the current deployment fails, use:

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

現在のデプロイが失敗した場合、特定のデプロイを再デプロイするには、次を使用します。To redeploy a specific deployment if the current deployment fails, use:

{
  "properties": {
    "templateLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
      "contentVersion": "1.0.0.0"
    },
    "mode": "Incremental",
    "parametersLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
      "contentVersion": "1.0.0.0"
    },
    "onErrorDeployment": {
      "type": "SpecificDeployment",
      "deploymentName": "<deploymentname>"
    }
  }
}

指定したデプロイは成功している必要があります。The specified deployment must have succeeded.

パラメーター ファイルParameter file

デプロイ中にパラメーター ファイルを使用してパラメーター値を渡す場合は、次の例に示すような形式の JSON ファイルを作成する必要があります。If you use a parameter file to pass parameter values during deployment, you need to create a JSON file with a format similar to the following example:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "webSiteName": {
            "value": "ExampleSite"
        },
        "webSiteHostingPlanName": {
            "value": "DefaultPlan"
        },
        "webSiteLocation": {
            "value": "West US"
        },
        "adminPassword": {
            "reference": {
               "keyVault": {
                  "id": "/subscriptions/{guid}/resourceGroups/{group-name}/providers/Microsoft.KeyVault/vaults/{vault-name}"
               },
               "secretName": "sqlAdminPassword"
            }
        }
   }
}

パラメーター ファイルのサイズは、64 KB 以下である必要があります。The size of the parameter file can't be more than 64 KB.

パラメーターに機密性の高い値(パスワードなど) を提供する必要がある場合は、その値を Key Vault に追加します。If you need to provide a sensitive value for a parameter (such as a password), add that value to a key vault. 前の例で示したように、デプロイ中に Key Vault を取得します。Retrieve the key vault during deployment as shown in the previous example. 詳細については、「 デプロイメント時にセキュリティで保護された値を渡す」を参照してください。For more information, see Pass secure values during deployment.

次の手順Next steps