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

Azure PowerShell と Resource Manager テンプレートを使用して Azure にリソースをデプロイする方法について説明します。Learn how to use Azure PowerShell with Resource Manager templates to deploy your resources to Azure. Azure ソリューションのデプロイと管理の概念について詳しくは、「Azure Resource Manager の概要」をご覧ください。For more information about the concepts of deploying and managing your Azure solutions, see Azure Resource Manager overview.

テンプレートをデプロイするには、通常、次の 2 つの手順が必要になります。To deploy a template, you typically need two steps:

  1. リソース グループを作成します。Create a resource group. リソース グループは、デプロイ済みのリソースのコンテナーとして機能します。Resource group 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.
  2. テンプレートをデプロイします。Deploy a template. テンプレートには、作成するリソースが定義されています。The template defines the resources to create. デプロイによって、指定されたリソース グループにリソースが作成されます。The deployment creates the resources in the resource group specified.

この記事では、この 2 つの手順によるデプロイ方法が使用されます。This two-step deployment method is used in this article. その他のオプションとしては、リソース グループとリソースを同時にデプロイします。The other option is to deploy a resource group and the resources at the same time. 詳しくは、「リソース グループを作成してリソースをデプロイする」をご覧ください。For more information, see Create resource group and deploy resources.

前提条件Prerequisites

Azure Cloud Shell を使用してテンプレートをデプロイする場合以外は、Azure PowerShell をインストールして Azure に接続する必要があります。Unless you use the Azure Cloud shell to deploy templates, you need to install Azure PowerShell and connect to Azure:

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するように更新されました。This article has been updated to use the new Azure PowerShell Az module. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. インストール手順については、Azure PowerShell のインストールに関するページを参照してください。For installation instructions, see Install Azure PowerShell.

ローカルに保存されたテンプレートをデプロイするDeploy templates stored locally

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

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateFile c:\MyTemplates\azuredeploy.json

c:\MyTemplates\azuredeploy.json はクイックスタート テンプレートであることに注意してください。Note c:\MyTemplates\azuredeploy.json is a quickstart template. 前提条件」を参照してください。See Prerequisites.

デプロイが完了するまでに数分かかる場合があります。The deployment can take a few minutes to complete.

外部に保存されたテンプレートをデプロイするDeploy templates stored externally

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.

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

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json

前の例では、テンプレートにはパブリックにアクセスできる 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. チュートリアルについては、「チュートリアル:Resource Manager テンプレートのデプロイで Azure Key Vault を統合する」を参照してください。To go through a tutorial, see Tutorial: Integrate Azure Key Vault in Resource Manager Template deployment.

Azure Cloud Shell からテンプレートをデプロイするDeploy templates from Azure Cloud shell

Azure Cloud Shell を使用して、テンプレートをデプロイできます。You can use the Azure Cloud Shell to deploy your template. 外部テンプレートをデプロイするには、テンプレートの URI を指定します。To deploy an external template, provide the URI of the template. ローカル テンプレートをデプロイするには、最初に Cloud Shell のストレージ アカウントにテンプレートを読み込む必要があります。To deploy a local template, you must first load your template into the storage account for your Cloud Shell. ファイルをシェルにアップロードするには、シェル ウィンドウから [ファイルのアップロード/ダウンロード] メニュー アイコンを選択します。To upload files to the shell, select the Upload/Download files menu icon from the shell window.

Cloud Shell を開くには、https://shell.azure.com を参照するか、または次のコード セクションの [使ってみる] を選択します。To open the Cloud shell, browse to https://shell.azure.com, or select Try-It from the following code section:

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json

シェルにコードを貼り付けて、シェル内を右クリックし、[貼り付け] を選択します。To paste the code into the shell, right-click inside the shell and then select Paste.

複数のリソース グループまたはサブスクリプションへのデプロイDeploy to multiple resource groups or subscriptions

テンプレートに含まれているリソースはすべて 1 つのリソース グループにデプロイするのが一般的です。Typically, you deploy all the resources in your template to a single resource group. 一方、さまざまなリソースを 1 つにまとめたうえで、複数のリソース グループまたはサブスクリプションにデプロイしたい状況もあります。However, there are scenarios where you want to deploy a set of resources together but place them in different resource groups or subscriptions. 単一のデプロイにデプロイできるリソース グループは 5 つまでです。You can deploy to only five resource groups in a single deployment. 詳しくは、「複数のサブスクリプションまたはリソース グループに Azure リソースをデプロイする」をご覧ください。For more information, see Deploy Azure resources to multiple resource groups and subscriptions.

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

デプロイが失敗した場合、デプロイ履歴にある以前に成功したデプロイを自動的に再デプロイすることができます。When a deployment fails, you can automatically redeploy an earlier, successful deployment from your deployment history. 再デプロイを指定するには、デプロイ コマンド内で -RollbackToLastDeployment または -RollBackDeploymentName パラメーターのいずれかを使用します。To specify redeployment, use either the -RollbackToLastDeployment or -RollBackDeploymentName parameter in the deployment command.

このオプションを使用するには、ご自身のデプロイを履歴で特定できるように、デプロイの名前は一意でなければなりません。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.

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

New-AzResourceGroupDeployment -Name ExampleDeployment02 `
  -ResourceGroupName $resourceGroupName `
  -TemplateFile c:\MyTemplates\azuredeploy.json `
  -RollbackToLastDeployment

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

New-AzResourceGroupDeployment -Name ExampleDeployment02 `
  -ResourceGroupName $resourceGroupName `
  -TemplateFile c:\MyTemplates\azuredeploy.json `
  -RollBackDeploymentName ExampleDeployment01

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

パラメーター値を渡すPass parameter values

パラメーター値を渡すには、インライン パラメーターまたはパラメーター ファイルのいずれかを使用できます。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

インライン パラメーターを渡すには、New-AzResourceGroupDeployment コマンドでパラメーターの名前を指定します。To pass inline parameters, provide the names of the parameter with the New-AzResourceGroupDeployment command. たとえば、文字列と配列をテンプレートに渡すには、以下を使用します。For example, to pass a string and array to a template, use:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleString "inline string" `
  -exampleArray $arrayParam

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

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
  -exampleArray $arrayParam

ファイルからのパラメーター値の取得は、構成値を指定する必要がある場合に便利です。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.

パラメーター ファイル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. パラメーター ファイルは、ローカル ファイルでも、アクセス可能な URI を持つ外部ファイルでもかまいません。The parameter file can be a local file or an external file with an accessible URI.

パラメーター ファイルは次の形式にする必要があります。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.

ローカル パラメーター ファイルを渡すには、TemplateParameterFile パラメーターを使用します。To pass a local parameter file, use the TemplateParameterFile parameter:

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json `
  -TemplateParameterFile c:\MyTemplates\storage.parameters.json

外部パラメーター ファイルを渡すには、TemplateParameterUri パラメーターを使用します。To pass an external parameter file, use the TemplateParameterUri parameter:

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json `
  -TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.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.

ただし、外部パラメーター ファイルを使用する場合、他の値をインラインまたはローカル ファイルから渡すことはできません。However, when you use an external parameter file, you can't pass other values either inline or from a local file. TemplateParameterUri パラメーターでパラメーター ファイルを指定すると、すべてのインライン パラメーターが無視されます。When you specify a parameter file in the TemplateParameterUri parameter, all inline parameters are ignored. すべてのパラメーター値を外部ファイル内で指定します。Provide all parameter values in the external file. パラメーター ファイルに含めることができない機密性の高い値がテンプレートに含まれている場合は、その値をキー コンテナーに追加するか、すべてのパラメーター値をインラインで動的に指定してください。If your template includes a sensitive value that you can't include in the parameter file, either add that value to a key vault, or dynamically provide all parameter values inline.

パラメーター名の競合Parameter name conflicts

PowerShell コマンドのパラメーターのいずれかと名前が同じであるパラメーターがテンプレートに含まれている場合、PowerShell ではテンプレート内のパラメーター名の後ろに FromTemplate という文字を付加します。If your template includes a parameter with the same name as one of the parameters in the PowerShell command, PowerShell presents the parameter from your template with the postfix FromTemplate. たとえば、テンプレート内の ResourceGroupName という名前のパラメーターは、New-AzResourceGroupDeployment コマンドレットの ResourceGroupName パラメーターと競合します。For example, a parameter named ResourceGroupName in your template conflicts with the ResourceGroupName parameter in the New-AzResourceGroupDeployment cmdlet. ResourceGroupNameFromTemplate の値を指定するように求められます。You're prompted to provide a value for ResourceGroupNameFromTemplate. 一般的に、このような混乱を防ぐために、デプロイ処理に使用したパラメーターと同じ名前をパラメーターに付けないことが推奨されます。In general, you should avoid this confusion by not naming parameters with the same name as parameters used for deployment operations.

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

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

Test-AzResourceGroupDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json -storageAccountType Standard_GRS

エラーが検出されなかった場合は、コマンドが応答なしで終了します。If no errors are detected, the command finishes without a response. エラーが検出された場合は、エラー メッセージが返されます。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:

Test-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json -storageAccountType badSku

Code    : InvalidTemplate
Message : Deployment template validation failed: 'The provided value 'badSku' for the template parameter 'storageAccountType'
          at line '15' and column '24' is not valid. The parameter value is not part of the allowed value(s):
          'Standard_LRS,Standard_ZRS,Standard_GRS,Standard_RAGRS,Premium_LRS'.'.
Details :

テンプレートに構文エラーがある場合は、テンプレートを解析できなかったことを示すエラー メッセージが返されます。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.

Test-AzResourceGroupDeployment : After parsing a value an unexpected character was encountered: 
  ". Path 'variables', line 31, position 3.

次の手順Next steps