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/デプロイ リソース タイプにあらゆる操作を実行するアクセス権かの゛必要です。 たとえば、仮想マシンをデプロイするには、Microsoft.Compute/virtualMachines/write
および Microsoft.Resources/deployments/*
アクセス許可が必要です。 What-If 操作のアクセス許可要件も同じです。
ロールとアクセス許可の一覧については、Azure の組み込みロールに関するページを参照してください。
デプロイのスコープ
リソース グループ、Azure サブスクリプション、管理グループ、またはテナントをデプロイのターゲットにすることができます。 使用するコマンドは、デプロイのスコープに応じて異なります。
リソース グループにデプロイするには、デプロイ - 作成に関するページのコマンドを使用します。 要求は以下に送信されます。
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
サブスクリプションにデプロイするには、デプロイ - サブスクリプション スコープで作成に関するページのコマンドを使用します。 要求は以下に送信されます。
PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
サブスクリプション レベルでのデプロイの詳細については、「サブスクリプション レベルでリソース グループとリソースを作成する」を参照してください。
管理グループにデプロイするには、デプロイ - 管理グループ スコープで作成に関するページを参照してください。 要求は以下に送信されます。
PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{groupId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
管理グループ レベルでのデプロイの詳細については、「管理グループ レベルでリソースを作成する」を参照してください。
テナントにデプロイするにはデプロイ - テナントのスコープでの作成または更新に関するページを使用します。 要求は以下に送信されます。
PUT https://management.azure.com/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
テナント レベルでのデプロイの詳細については、「テナント レベルでリソースを作成する」を参照してください。
この記事の例では、リソース グループ デプロイを使用します。
REST API でデプロイする
一般的なパラメーターおよびヘッダー (認証トークンを含む) を設定します。
存在しないリソース グループにデプロイする場合、リソース グループを作成する必要があります。 ソリューションに必要なサブスクリプション ID、新しいリソース グループの名前、場所を指定します。 詳細については、「リソース グループの作成」を参照してください。
PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
次のような要求本文を使用します。
{ "location": "West US", "tags": { "tagname1": "tagvalue1" } }
テンプレートをデプロイする前に、テンプレートが環境に与える変更をプレビューすることができます。 what-if 操作を使用して、テンプレートによって必要な変更が行われるかどうかを確認します。 What-if はまた、テンプレートのエラーも検証します。
テンプレートをデプロイするには、要求 URI にサブスクリプション ID、リソース グループの名前、デプロイの名前を指定します。
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) を使用したアクセスの委任に関するページを参照してください。
パラメーターに機密性の高い値(パスワードなど) を提供する必要がある場合は、その値を Key Vault に追加します。 前の例で示したように、デプロイ中に Key Vault を取得します。 詳細については、「デプロイ時に Azure Key Vault を使用して、セキュリティで保護されたパラメーター値を渡す」を参照してください
テンプレートとパラメーターのファイルにリンクするのではなく、それらを要求本文に含めることができます。 次の例は、テンプレートとパラメーターをインラインにした要求の本文を示しています。
{ "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" } } } }
テンプレートのデプロイの状態を取得するには、デプロイ - 取得に関するページを参照してください。
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
のような名前を付けることができます。
デプロイを実行するたびに、リソース グループのデプロイ履歴にデプロイ名のエントリが追加されます。 別のデプロイを実行するときに同じ名前を付けると、現在のデプロイによって前のエントリが置き換えられます。 デプロイ履歴に一意のエントリを保持する場合は、デプロイごとに一意の名前を付けます。
一意の名前を作成するために、ランダムな数値を割り当てることができます。 または、日付の値を追加します。
同じリソース グループに対して同じ名前のデプロイを同時に実行した場合は、最後のデプロイのみが完了します。 完了していない同じ名前のデプロイは、最後のデプロイによって置き換えられます。 たとえば、storage1
という名前のストレージ アカウントをデプロイする newStorage
という名前のデプロイを実行し、storage2
という名前のストレージ アカウントをデプロイする newStorage
という名前の別のデプロイを同時に実行した場合は、1 つのストレージ アカウントのみがデプロイされます。 結果のストレージ アカウントの名前は storage2
になります。
ただし、storage1
という名前のストレージ アカウントをデプロイする newStorage
という名前のデプロイを実行し、その完了直後に、storage2
という名前のストレージ アカウントをデプロイする newStorage
という名前の別のデプロイを実行した場合は、ストレージ アカウントは 2 つになります。 1 つは storage1
という名前に、もう 1 つは storage2
という名前になります。 ただし、デプロイ履歴にはエントリが 1 つだけ存在します。
デプロイごとに一意の名前を指定すると、競合なしでそれらを同時に実行できます。 storage1
という名前のストレージ アカウントをデプロイする newStorage1
という名前のデプロイを実行し、storage2
という名前のストレージ アカウントをデプロイする newStorage2
という名前の別のデプロイを同時に実行した場合は、2 つのストレージ アカウントがデプロイされ、デプロイ履歴には 2 つのエントリが存在します。
同時デプロイによる競合を回避し、デプロイ履歴に一意のエントリが確実に存在するようにするには、各デプロイに一意の名前を付けます。
次のステップ
- エラーが発生したときに正常なデプロイにロールバックするには、「エラー発生時に正常なデプロイにロールバックする」を参照してください。
- リソース グループに存在するが、テンプレートで定義されていないリソースの処理方法を指定するには、「Azure Resource Manager のデプロイ モード」を参照してください。
- 非同期 REST 操作の処理の詳細については、「Track asynchronous Azure operations (非同期の Azure 操作の追跡)」を参照してください。
- テンプレートの詳細については、「ARM テンプレートの構造と構文について」を参照してください。