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

この記事では、Azure CLI と Resource Manager テンプレートを使用して、Azure にリソースをデプロイする方法について説明します。This article explains how to use Azure CLI with Resource Manager templates to deploy your resources to Azure. Azure ソリューションのデプロイと管理に関する概念に精通していない場合は、「Azure Resource Manager の概要」を参照してください。If you aren't familiar with the concepts of deploying and managing your Azure solutions, see Azure Resource Manager overview.

このサンプルを実行するには、最新バージョンの Azure CLI をインストールします。To run this sample, install the latest version of the Azure CLI. 開始するには、az login を実行して、Azure との接続を作成します。To start, run az login to create a connection with Azure.

Azure CLI のサンプルは、bash シェル用に記述されています。Samples for the Azure CLI are written for the bash shell. このサンプルを Windows PowerShell またはコマンド プロンプトで実行するには、スクリプトの要素を変更する必要があります。To run this sample in Windows PowerShell or Command Prompt, you may need to change elements of the script.

Azure CLI がインストールされていない場合は、Cloud Shell を使用できます。If you don't have Azure CLI installed, you can use the Cloud Shell.

デプロイの範囲Deployment scope

Azure サブスクリプション、またはサブスクリプション内のリソース グループのいずれかを、デプロイの対象として指定できます。You can target your deployment to either an Azure subscription or a resource group within a subscription. 多くの場合、リソース グループをデプロイの対象にします。In most cases, you'll target deployment to a resource group. サブスクリプション デプロイを使用するのは、サブスクリプション全体にポリシーとロールの割り当てを適用するときです。Use subscription deployments to apply policies and role assignments across the subscription. また、リソース グループを作成し、それにリソースをデプロイする場合も、サブスクリプション デプロイを使用します。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.

リソース グループにデプロイするには、az group deployment create を使用します。To deploy to a resource group, use az group deployment create:

az group deployment create --resource-group <resource-group-name> --template-file <path-to-template>

サブスクリプションにデプロイするには、az deployment create を使用します。To deploy to a subscription, use az deployment create:

az deployment create --location <location> --template-file <path-to-template>

現在、管理グループのデプロイは、REST API を介してのみサポートされています。Currently, management group deployments are only supported through the REST API. Resource Manager テンプレートと Resource Manager REST API を使用したリソースのデプロイ」を参照してください。See Deploy resources with Resource Manager templates and Resource Manager REST API.

この記事の例では、リソース グループ デプロイを使用します。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.

ローカル テンプレートのデプロイDeploy local template

リソースを Azure にデプロイするときは、以下の手順に従います。When deploying resources to Azure, you:

  1. Azure アカウントへのサインインSign in to your Azure account
  2. デプロイ済みのリソースのコンテナーとして機能するリソース グループを作成します。Create a resource group that serves as the container for the deployed resources. リソース グループ名には、英数字、ピリオド、アンダースコア、ハイフン、かっこのみを含めることができます。The name of the resource group can only include alphanumeric characters, periods, underscores, hyphens, and parenthesis. 最大長は 90 文字です。It can be up to 90 characters. 末尾をピリオドにすることはできません。It can't end in a period.
  3. 作成するリソースを定義するテンプレートをリソース グループにデプロイするDeploy to the resource group the template that defines the resources to create

テンプレートには、デプロイをカスタマイズできるパラメーターを含めることができます。A template can include parameters that enable you to customize the deployment. たとえば、特定の環境 (開発、テスト、運用など) 向けにカスタマイズした値を指定できます。For example, you can provide values that are tailored for a particular environment (such as dev, test, and production). サンプル テンプレートでは、ストレージ アカウント SKU のパラメーターを定義します。The sample template defines a parameter for the storage account SKU.

次の例では、リソース グループを作成し、ローカル コンピューターからテンプレートをデプロイします。The following example creates a resource group, and deploys a template from your local machine:

az group create --name ExampleGroup --location "Central US"
az group deployment create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters storageAccountType=Standard_GRS

デプロイが完了するまでに数分かかる場合があります。The deployment can take a few minutes to complete. デプロイが完了すると、次のような結果を含むメッセージが表示されます。When it finishes, you see a message that includes the result:

"provisioningState": "Succeeded",

リモート テンプレートのデプロイDeploy remote template

Resource Manager テンプレートは、ローカル コンピューターに格納する代わりに、外部の場所に格納することもできます。Instead of storing Resource Manager templates on your local machine, you may prefer to store them in an external location. ソース管理リポジトリ (GitHub など) にテンプレートを格納できます。You can store templates in a source control repository (such as GitHub). または、組織内の共有アクセス用の Azure ストレージ アカウントに格納することができます。Or, you can store them in an Azure storage account for shared access in your organization.

外部テンプレートをデプロイするには、template-uri パラメーターを使用します。To deploy an external template, use the template-uri parameter. この例の URI を使用して、GitHub のサンプル テンプレートをデプロイします。Use the URI in the example to deploy the sample template from GitHub.

az group create --name ExampleGroup --location "Central US"
az group deployment create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json" \
  --parameters storageAccountType=Standard_GRS

前の例では、テンプレートにはパブリックにアクセスできる URI が必要になります。テンプレートに機密データを含めてはいけないため、この方法は多くの場合に利用できます。The preceding example requires a publicly accessible URI for the template, which works for most scenarios because your template shouldn't include sensitive data. 機密データ (管理者パスワードなど) を指定する必要がある場合は、セキュリティで保護されたパラメーターとしてその値を渡します。If you need to specify sensitive data (like an admin password), pass that value as a secure parameter. ただし、テンプレートを一般からアクセス可能にしない場合は、プライベートなストレージ コンテナーに格納することで保護できます。However, if you don't want your template to be publicly accessible, you can protect it by storing it in a private storage container. Shared Access Signature (SAS) トークンを必要とするテンプレートをデプロイする方法については、SAS トークンを使用したプライベート テンプレートのデプロイに関するページをご覧ください。For information about deploying a template that requires a shared access signature (SAS) token, see Deploy private template with SAS token.

Cloud Shell からのテンプレートのデプロイDeploy template from Cloud Shell

テンプレートは、Cloud Shell を使ってデプロイすることができます。You can use Cloud Shell to deploy your template. 外部テンプレートをデプロイするには、外部デプロイの場合とまったく同じように、テンプレートの URI を指定します。To deploy an external template, provide the URI of the template exactly as you would for any external deployment. ローカル テンプレートをデプロイするには、最初に Cloud Shell のストレージ アカウントにテンプレートを読み込む必要があります。To deploy a local template, you must first load your template into the storage account for your Cloud Shell. このセクションでは、Cloud Shell アカウントにテンプレートを読み込み、ローカル ファイルとしてデプロイする方法について説明します。This section describes how to load the template to your cloud shell account, and deploy it as a local file. Cloud Shell の使用経験がない場合は、その設定について、「Azure Cloud Shell の概要」を参照してください。If you haven't used Cloud Shell, see Overview of Azure Cloud Shell for information about setting it up.

  1. Azure Portal にサインインします。Sign in to the Azure portal.

  2. Cloud Shell リソース グループを選択します。Select your Cloud Shell resource group. 名前のパターンは cloud-shell-storage-<region> です。The name pattern is cloud-shell-storage-<region>.

    リソース グループの選択

  3. Cloud Shell のストレージ アカウントを選択します。Select the storage account for your Cloud Shell.

    ストレージ アカウントを選択する

  4. [BLOB] を選択します。Select Blobs.

    BLOB の選択

  5. [+ コンテナー] を選択します。Select + Container.

    コンテナーの追加

  6. コンテナーに名前とアクセス レベルを付与します。Give your container a name and an access level. この記事のサンプル テンプレートには機密性の高い情報は含まれていないため、匿名の読み取りアクセスを許可します。The sample template in this article contains no sensitive information, so allow anonymous read access. [OK] を選択します。Select OK.

    コンテナーの値の指定

  7. 作成したコンテナーを選択します。Select the container you created.

    新しいコンテナーの選択

  8. [アップロード] を選択します。Select Upload.

    BLOB のアップロード

  9. テンプレートを見つけてアップロードします。Find and upload your template.

    ファイルをアップロードする

  10. アップロードが完了したら、テンプレートを選択します。After it has uploaded, select the template.

    新しいテンプレートの選択

  11. URL をコピーします。Copy the URL.

    URL のコピー

  12. プロンプトを開きます。Open the prompt.

    Cloud Shell を開く

Cloud Shell で次のコマンドを使用します。In the Cloud Shell, use the following commands:

az group create --name examplegroup --location "South Central US"
az group deployment create --resource-group examplegroup \
  --template-uri <copied URL> \
  --parameters storageAccountType=Standard_GRS

デプロイに失敗したときに再デプロイする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. 再デプロイを指定するには、デプロイ コマンドで --rollback-on-error パラメーターを使用します。To specify redeployment, use the --rollback-on-error parameter in the deployment command. この機能は、インフラストラクチャのデプロイに関して既知の正常な状態が存在し、その状態に戻したい場合に便利です。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 can't 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.

最後に成功したデプロイを再デプロイするには、--rollback-on-error パラメーターをフラグとして追加します。To redeploy the last successful deployment, add the --rollback-on-error parameter as a flag.

az group deployment create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters storageAccountType=Standard_GRS \
  --rollback-on-error

特定のデプロイを再デプロイするには、--rollback-on-error パラメーターを使用してデプロイの名前を指定します。To redeploy a specific deployment, use the --rollback-on-error parameter and provide the name of the deployment.

az group deployment create \
  --name ExampleDeployment02 \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters storageAccountType=Standard_GRS \
  --rollback-on-error ExampleDeployment01

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

parametersParameters

パラメーター値を渡すには、インライン パラメーターまたはパラメーター ファイルのいずれかを使用できます。To pass parameter values, you can use either inline parameters or a parameter file. この記事の先の例では、インライン パラメーターを示しています。The preceding examples in this article show inline parameters.

インライン パラメーターInline parameters

インライン パラメーターを渡すには、parameters に値を指定します。To pass inline parameters, provide the values in parameters. たとえば、Bash シェルで文字列と配列をテンプレートに渡すには、以下を使用します。For example, to pass a string and array to a template is a Bash shell, use:

az group deployment create \
  --resource-group testgroup \
  --template-file demotemplate.json \
  --parameters exampleString='inline string' exampleArray='("value1", "value2")'

ファイルの内容を取得し、その内容をインライン パラメーターとして提供することもできます。You can also get the contents of file and provide that content as an inline parameter.

az group deployment create \
  --resource-group testgroup \
  --template-file demotemplate.json \
  --parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json

ファイルからのパラメーター値の取得は、構成値を指定する必要がある場合に便利です。Getting a parameter value from a file is helpful when you need to provide configuration values. たとえば、Linux 仮想マシン用の cloud-init の値を指定できます。For example, you can provide cloud-init values for a Linux virtual machine.

arrayContent.json 形式は次のようになります。The arrayContent.json format is:

[
    "value1",
    "value2"
]

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

スクリプト内のインライン値としてパラメーターを渡すよりも、パラメーター値を含む JSON ファイルを使用するほうが簡単な場合もあります。Rather than passing parameters as inline values in your script, you may find it easier to use a JSON file that contains the parameter values. パラメーター ファイルはローカル ファイルである必要があります。The parameter file must be a local file. 外部パラメーター ファイルは、Azure CLI ではサポートされていません。External parameter files aren't supported with Azure CLI.

パラメーター ファイルは次の形式にする必要があります。The parameter file must be in the following format:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
     "storageAccountType": {
         "value": "Standard_GRS"
     }
  }
}

parameters セクションに、テンプレートで定義したパラメーター (storageAccountType) に一致するパラメーター名が含まれていることに注目してください。Notice that the parameters section includes a parameter name that matches the parameter defined in your template (storageAccountType). パラメーター ファイルに、このパラメーターの値が含まれます。The parameter file contains a value for the parameter. この値は、デプロイの際に、テンプレートに自動的に渡されます。This value is automatically passed to the template during deployment. 複数のパラメーター ファイルを作成し、シナリオに合う適切なパラメーター ファイルを渡すことができます。You can create more than one parameter file, and then pass in the appropriate parameter file for the scenario.

前の例をコピーし、storage.parameters.json という名前のファイルとして保存します。Copy the preceding example and save it as a file named storage.parameters.json.

ローカル パラメーター ファイルを渡すには、@ を使用して storage.parameters.json という名前のローカル ファイルを指定します。To pass a local parameter file, use @ to specify a local file named storage.parameters.json.

az group deployment create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters @storage.parameters.json

パラメーターの優先順位Parameter precedence

同じデプロイ操作で、インライン パラメーターとローカル パラメーター ファイルを使用することができます。You can use inline parameters and a local parameter file in the same deployment operation. たとえば、一部の値をローカル パラメーター ファイルで指定し、その他の値をデプロイ中にインラインで追加します。For example, you can specify some values in the local parameter file and add other values inline during deployment. ローカル パラメーター ファイルとインラインの両方でパラメーターの値を指定すると、インラインの値が優先されます。If you provide values for a parameter in both the local parameter file and inline, the inline value takes precedence.

az group deployment create \
  --resource-group testgroup \
  --template-file demotemplate.json \
  --parameters @demotemplate.parameters.json \
  --parameters exampleArray=@arrtest.json

テンプレートのデプロイをテストするTest a template deployment

リソースを実際にデプロイすることなく、テンプレートとパラメーターの値をテストするには、az group deployment validate を使用します。To test your template and parameter values without actually deploying any resources, use az group deployment validate.

az group deployment validate \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters @storage.parameters.json

エラーが検出されなかった場合は、テスト デプロイに関する情報が返されます。If no errors are detected, the command returns information about the test deployment. 具体的には、error 値が null であることに注目してください。In particular, notice that the error value is null.

{
  "error": null,
  "properties": {
      ...

エラーが検出された場合は、エラー メッセージが返されます。If an error is detected, the command returns an error message. たとえば、ストレージ アカウント SKU について間違った値を渡した場合は、次のエラーが返されます。For example, passing an incorrect value for the storage account SKU, returns the following error:

{
  "error": {
    "code": "InvalidTemplate",
    "details": null,
    "message": "Deployment template validation failed: 'The provided value 'badSKU' for the template parameter 
      'storageAccountType' at line '13' and column '20' is not valid. The parameter value is not part of the allowed 
      value(s): 'Standard_LRS,Standard_ZRS,Standard_GRS,Standard_RAGRS,Premium_LRS'.'.",
    "target": null
  },
  "properties": null
}

テンプレートに構文エラーがある場合は、テンプレートを解析できなかったことを示すエラー メッセージが返されます。If your template has a syntax error, the command returns an error indicating it couldn't parse the template. このメッセージには、解析エラーの行番号と位置が表示されます。The message indicates the line number and position of the parsing error.

{
  "error": {
    "code": "InvalidTemplate",
    "details": null,
    "message": "Deployment template parse failed: 'After parsing a value an unexpected character was encountered:
      \". Path 'variables', line 31, position 3.'.",
    "target": null
  },
  "properties": null
}

次の手順Next steps