この記事では、Azure Resource Manager テンプレート (ARM テンプレート) でAzure CLIを使用して、リソースをAzureにデプロイする方法について説明します。 Azure ソリューションのデプロイと管理の概念に慣れていない場合は、template デプロイの概要を参照してください。
デプロイ コマンドは、Azure CLI バージョン 2.2.0 で変更されました。 この記事の例では、Azure CLI バージョン 2.20.0 以降が必要です。
このサンプルを実行するには、Azure CLIの最新バージョンをインストールします。 開始するには、az login を実行して、Azureとの接続を作成します。
Azure CLIのサンプルは、bash シェル用に記述されています。 PowerShell またはコマンド プロンプトWindowsでこのサンプルを実行するには、スクリプトの要素を変更する必要がある場合があります。
Azure CLIがインストールされていない場合は、Azure Cloud Shellを使用できます。 詳細については、「deploy ARM templates from Azure Cloud Shell」を参照してください。
ヒント
Bicep は ARM テンプレートと同じ機能を提供し、構文の方が使いやすいためです。 詳細については、「
[前提条件]
必要なアクセス許可
Bicep ファイルまたは Azure Resource Manager (ARM) テンプレートをデプロイするには、デプロイするリソースに対する書き込みアクセス権と、Microsoft.Resources/deployments リソースの種類に対するすべての操作へのアクセス権が必要です。 たとえば、仮想マシンをデプロイするには、Microsoft.Compute/virtualMachines/write と Microsoft.Resources/deployments/* アクセス許可が必要です。 What-If 操作のアクセス許可要件も同じです。
Azure CLIバージョン 2.76.0 以降 および Azure PowerShell バージョン 13.4.0 以降では、このプロセス中に ARM がBicep テンプレートをどの程度徹底的に検証するかを判断する ValidationLevel スイッチが導入されています。 詳細については、「What-if コマンド」を参照してください。
ロールとアクセス許可の一覧については、「Azure組み込みロールを参照してください。
配備の範囲
Azureデプロイ テンプレートは、リソース グループ、サブスクリプション、管理グループ、またはテナントを対象にすることができます。 使用するコマンドは、デプロイのスコープに応じて異なります。
リソース グループにデプロイするには、az deployment group create を使用します。
az deployment group create --resource-group <resource-group-name> --template-file <path-to-template>サブスクリプションにデプロイするには、az deployment sub create を使用します。
az deployment sub create --location <location> --template-file <path-to-template>サブスクリプション レベルのデプロイの詳細については、「サブスクリプション レベルでのリソース グループとリソースの作成」を参照してください。
管理グループにデプロイするには、az deployment mg create を使用します。
az deployment mg create --location <location> --template-file <path-to-template>管理グループ レベルのデプロイの詳細については、「 管理グループ レベルでのリソースの作成」を参照してください。
テナントにデプロイするには、az deployment tenant create を使用します。
az deployment tenant create --location <location> --template-file <path-to-template>テナント レベルのデプロイの詳細については、「テナント レベルでのリソースの作成」を参照してください。
各スコープに対して、テンプレートをデプロイするユーザーにはリソースを作成するためのアクセス許可が必要です。
ローカル テンプレートのデプロイ
ローカル コンピューターからの ARM テンプレートまたは外部に格納されているものをデプロイできます。 ここでは、ローカル テンプレートのデプロイについて説明します。
存在しないリソース グループにデプロイする場合、リソース グループを作成する必要があります。 リソース グループ名には、英数字、ピリオド、アンダースコア、ハイフン、かっこのみを含めることができます。 最大長は 90 文字です。 名前の末尾をピリオドにすることはできません。
az group create --name ExampleGroup --location "Central US"
ローカル テンプレートをデプロイするには、デプロイ コマンドで --template-file パラメーターを使用します。 次の例では、パラメーター値を設定する方法も示しています。
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file <path-to-template> \
--parameters storageAccountType=Standard_GRS
--template-file パラメーターの値は、Bicep ファイルまたは .json または .jsonc ファイルである必要があります。 ファイル拡張子が .jsonc であれば、ファイルに // スタイル コメントを含めることができます。 ARM システムは、// ファイルで .json コメントを受け入れます。 ファイル拡張子の違いによって影響は受けません。 コメントとメタデータの詳細については、「 ARM テンプレートの構造と構文を理解する」を参照してください。
Azureデプロイ テンプレートの完了には数分かかる場合があります。 デプロイが完了すると、次のような結果を含むメッセージが表示されます。
"provisioningState": "Succeeded",
リモート テンプレートのデプロイ
ARM テンプレートをローカル コンピューターに格納する代わりに、外部の場所に格納することもできます。 テンプレートは、ソース管理リポジトリ (GitHub など) に格納できます。 または、組織内の共有アクセス用のAzure ストレージ アカウントに格納することもできます。
注
プライベート GitHub リポジトリに格納されているテンプレートをデプロイするか、リンクされたテンプレートを参照するには、カスタムおよびセキュリティで保護されたAzure portalオファリングの作成に記載されているカスタム ソリューションを参照してください。 Azure Key VaultからGitHubトークンをプルするAzure関数を作成できます。
存在しないリソース グループにデプロイする場合、リソース グループを作成する必要があります。 リソース グループ名には、英数字、ピリオド、アンダースコア、ハイフン、かっこのみを含めることができます。 最大長は 90 文字です。 名前の末尾をピリオドにすることはできません。
az group create --name ExampleGroup --location "Central US"
外部テンプレートをデプロイするには、template-uri パラメーターを使用します。
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
--parameters storageAccountType=Standard_GRS
前の例では、テンプレートにはパブリックにアクセスできる URI が必要になります。テンプレートに機密データを含めてはいけないため、この方法は多くの場合に利用できます。 機密データ (管理者パスワードなど) を指定する必要がある場合は、セキュリティで保護されたパラメーターとしてその値を渡します。 ただし、テンプレートへのアクセスを管理する場合は、 テンプレート スペックの使用を検討してください。
離れた場所にあり、リンクされているテンプレートを、ストレージ アカウントに格納されている相対パスでデプロイするには、query-string を使用して SAS トークンを指定します。
az deployment group create \
--name linkedTemplateWithRelativePath \
--resource-group myResourceGroup \
--template-uri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" \
--query-string $sasToken
詳細については、「 リンクされたテンプレートの相対パスを使用する」を参照してください。
Azure デプロイ テンプレート名
ARM テンプレートをデプロイするときに、Azureデプロイ テンプレートに名前を付けることができます。 この名前は、デプロイ履歴からデプロイを復元するのに役立ちます。 デプロイの名前を指定しない場合は、テンプレート ファイルの名前が使用されます。 たとえば、 azuredeploy.json という名前のテンプレートをデプロイし、デプロイ名を指定しない場合、デプロイには azuredeploy という名前が付けられます。
デプロイを実行するたびに、リソース グループのデプロイ履歴にデプロイ名のエントリが追加されます。 別のデプロイを実行するときに同じ名前を付けると、現在のデプロイによって前のエントリが置き換えられます。 デプロイ履歴に一意のエントリを保持する場合は、デプロイごとに一意の名前を付けます。
一意の名前を作成するために、ランダムな数値を割り当てることができます。
deploymentName='ExampleDeployment'$RANDOM
または、日付の値を追加します。
deploymentName='ExampleDeployment'$(date +"%d-%b-%Y")
同じリソース グループに対して同じ名前のデプロイを同時に実行した場合は、最後のデプロイのみが完了します。 完了していない同じ名前のデプロイは、最後のデプロイによって置き換えられます。 たとえば、newStorage という名前のストレージ アカウントをデプロイする storage1 という名前のデプロイを実行し、newStorage という名前のストレージ アカウントをデプロイする storage2 という名前の別のデプロイを同時に実行した場合は、1 つのストレージ アカウントのみがデプロイされます。 結果のストレージ アカウントの名前は storage2 になります。
ただし、newStorage という名前のストレージ アカウントをデプロイする storage1 という名前のデプロイを実行し、その完了直後に、newStorage という名前のストレージ アカウントをデプロイする storage2 という名前の別のデプロイを実行した場合は、ストレージ アカウントは 2 つになります。 1 つは storage1 という名前に、もう 1 つは storage2 という名前になります。 ただし、デプロイ履歴にはエントリが 1 つだけ存在します。
デプロイごとに一意の名前を指定すると、競合なしでそれらを同時に実行できます。
newStorage1 という名前のストレージ アカウントをデプロイする storage1 という名前のデプロイを実行し、newStorage2 という名前のストレージ アカウントをデプロイする storage2 という名前の別のデプロイを同時に実行した場合は、2 つのストレージ アカウントがデプロイされ、デプロイ履歴には 2 つのエントリが存在します。
同時デプロイによる競合を回避し、デプロイ履歴に一意のエントリが確実に存在するようにするには、各デプロイに一意の名前を付けます。
テンプレート スペックのデプロイ
ローカルテンプレートまたはリモート テンプレートをデプロイする代わりに、template 仕様を作成できます。テンプレート スペックは、ARM テンプレートを含む Azure サブスクリプション内のリソースです。 これにより、組織内のユーザーとテンプレートを安全に共有することが容易になります。 Azureロールベースのアクセス制御 (Azure RBAC) を使用して、テンプレート スペックへのアクセスを許可します。この機能は現在プレビュー段階です。
次の例では、テンプレート スペックの作成とデプロイの方法を示します。
まず、ARM テンプレートを指定して、テンプレート スペックを作成します。
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location "westus2" \
--template-file "./mainTemplate.json"
次に、テンプレート スペックの ID を取得して、デプロイします。
id = $(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
az deployment group create \
--resource-group demoRG \
--template-spec $id
詳細については、「Azure Resource Manager テンプレート スペックを参照してください。
変更のプレビュー
ARM テンプレートをデプロイする前に、テンプレートが環境に加える変更をプレビューできます。 what-if 操作を使用して、テンプレートが期待する変更を行うことを確認します。 What-if はまた、テンプレートのエラーも検証します。
パラメーター
パラメーター値を渡すには、インライン パラメーターまたはパラメーター ファイルのいずれかを使用できます。 パラメーター ファイルには、Bicep パラメーター ファイルまたは JSON パラメーター ファイルのいずれかを指定できます。
インライン パラメーター
インライン パラメーターを渡すには、parameters に値を指定します。 たとえば、Bash シェルで文字列と配列をテンプレートに渡すには、以下を使用します。
az deployment group create \
--resource-group testgroup \
--template-file <path-to-template> \
--parameters exampleString='inline string' exampleArray='("value1", "value2")'
Windows コマンド プロンプト (CMD) または PowerShell でAzure CLIを使用している場合は、exampleArray="['value1','value2']" の形式で配列を渡します。
ファイルの内容を取得し、その内容をインライン パラメーターとして提供することもできます。
az deployment group create \
--resource-group testgroup \
--template-file <path-to-template> \
--parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json
ファイルからのパラメーター値の取得は、構成値を指定する必要がある場合に便利です。 たとえば、 Linux 仮想マシンに cloud-init 値を指定できます。
arrayContent.json 形式は次のとおりです。
[
"value1",
"value2"
]
タグの設定などを目的にオブジェクトを渡すには、JSON を使用します。 たとえば、テンプレートには、次のようなパラメーターを含めることができます。
"resourceTags": {
"type": "object",
"defaultValue": {
"Cost Center": "IT Department"
}
}
この場合は、次の Bash スクリプトに示すように、JSON 文字列を渡してパラメーターを設定できます。
tags='{"Owner":"Contoso","Cost Center":"2345-324"}'
az deployment group create --name addstorage --resource-group myResourceGroup \
--template-file $templateFile \
--parameters resourceName=abcdef4556 resourceTags="$tags"
オブジェクトに渡す JSON を二重引用符で囲みます。
変数を使用してパラメーター値を格納できます。 Bash では、変数をすべてのパラメーター値に設定し、それをデプロイ コマンドに追加します。
params="prefix=start suffix=end"
az deployment group create \
--resource-group testgroup \
--template-file <path-to-template> \
--parameters $params
ただし、Windows コマンド プロンプト (CMD) または PowerShell でAzure CLIを使用している場合は、変数を JSON 文字列に設定します。 引用符をエスケープします ($params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }')。
JSON パラメーター ファイル
スクリプトでパラメーターをインライン値として渡すのではなく、パラメーター値を含むパラメーター ファイル (.bicepparam ファイルまたは JSON パラメーター ファイル) を使用する方が簡単な場合があります。 パラメータ ファイルはローカル ファイルである必要があります。 外部パラメーター ファイルは、Azure CLIではサポートされていません。
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file storage.json \
--parameters 'storage.parameters.json'
パラメーター ファイルの詳細については、「Create Resource Manager パラメーター ファイルを参照してください。
Bicep のパラメーター ファイル
Azure CLI バージョン 2.53.0 以降と Bicep CLI バージョン 0.22.6 以降を使用して、Bicep パラメーター ファイルを利用することで Bicep ファイルをデプロイできます。 Bicep パラメーター ファイル内の using ステートメントでは、--template-file スイッチにBicep パラメーター ファイルを指定するときに、--parameters スイッチを指定する必要はありません。
--template-file スイッチを含めると、「.bicepparam ファイルには、.bicep ファイルのみが許可されます」というエラーが発生します。
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--parameters storage.bicepparam
パラメータ ファイルはローカル ファイルである必要があります。 外部パラメーター ファイルは、Azure CLIではサポートされていません。 パラメーター ファイルの詳細については、「create Resource Manager parameters file」を参照してください。
コメントと拡張 JSON 形式
パラメーター ファイルに // スタイル コメントを含めることができますが、このファイルの拡張子を .jsonc にする必要があります。
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file storage.json \
--parameters '@storage.parameters.jsonc'
コメントとメタデータの詳細については、「 ARM テンプレートの構造と構文について」を参照してください。
バージョン 2.3.0 以前のAzure CLIを使用している場合は、--handle-extended-json-format スイッチを使用して、複数行の文字列またはコメントを含むテンプレートをデプロイできます。 次に例を示します。
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2025-04-01",
"name": "[variables('vmName')]", // to customize name, change it in variables
"location": "[
parameters('location')
]", //defaults to resource group location
/*
storage account and network interface
must be deployed first
*/
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
次のステップ
- エラーが発生したときに正常なデプロイにロールバックするには、「デプロイが成功した場合 のエラー時のロールバック」を参照してください。
- リソース グループに存在するが、テンプレートで定義されていないリソースの処理方法を指定するには、「Azure Resource Manager デプロイ モードを参照してください。
- テンプレートでパラメーターを定義する方法については、「ARM テンプレート の構造と構文について」を参照してください。
- 一般的なデプロイ エラーの解決に関するヒントについては、「
Azure Resource Manager 」を参照してください。