この記事では、Azure Resource Manager REST API と Azure Resource Manager テンプレート (ARM テンプレート) を使用して、リソースを Azure にデプロイする方法について説明します。
要求本文にテンプレートを含めるか、ファイルへのリンクを含めることができます。 ファイルを使用する場合は、ローカル ファイルまたは URI で使用できる外部ファイルを指定できます。 テンプレートがストレージ アカウント内にある場合は、テンプレートへのアクセスを制限し、デプロイ時に Shared Access Signature (SAS) トークンを提供できます。
必要なアクセス許可
Bicep ファイルまたは ARM テンプレートをデプロイするには、デプロイ対象のリソースに対する書き込みアクセス権が必要であり、さらに、Microsoft.Resources/deployments リソース タイプでのすべての操作に対するアクセス権が必要です。 たとえば、仮想マシンをデプロイするには、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 はまた、テンプレートのエラーも検証します。
テンプレートをデプロイするには、サブスクリプション ID、リソース グループの名前、要求 URI 内のデプロイの名前を指定します。
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) を使用したアクセスの委任に関するページを参照してください。
パラメーターに機密性の高い値 (パスワードなど) を指定する必要がある場合は、その値をキー コンテナーに追加します。 前の例に示すように、デプロイ時にキーボールトを取得します。 詳細については、「 デプロイ時に 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
などの名前を付けることができます。
デプロイを実行するたびに、リソース グループのデプロイ履歴にデプロイ名のエントリが追加されます。 別のデプロイを実行するときに同じ名前を付けると、現在のデプロイによって前のエントリが置き換えられます。 デプロイ履歴に一意のエントリを保持する場合は、デプロイごとに一意の名前を付けます。
一意の名前を作成するために、ランダムな数値を割り当てることができます。 または、日付の値を追加します。
同じリソース グループに対して同じ名前のデプロイを同時に実行した場合は、最後のデプロイのみが完了します。 完了していない同じ名前のデプロイは、最後のデプロイによって置き換えられます。 たとえば、newStorage
という名前のストレージ アカウントをデプロイする storage1
という名前のデプロイを実行し、newStorage
という名前のストレージ アカウントをデプロイする storage2
という名前の別のデプロイを同時に実行した場合は、1 つのストレージ アカウントのみがデプロイされます。 結果のストレージ アカウントの名前は storage2
になります。
ただし、newStorage
という名前のストレージ アカウントをデプロイする storage1
という名前のデプロイを実行し、その完了直後に、newStorage
という名前のストレージ アカウントをデプロイする storage2
という名前の別のデプロイを実行した場合は、ストレージ アカウントは 2 つになります。 1 つは storage1
という名前に、もう 1 つは storage2
という名前になります。 ただし、デプロイ履歴にはエントリが 1 つだけ存在します。
デプロイごとに一意の名前を指定すると、競合なしでそれらを同時に実行できます。
newStorage1
という名前のストレージ アカウントをデプロイする storage1
という名前のデプロイを実行し、newStorage2
という名前のストレージ アカウントをデプロイする storage2
という名前の別のデプロイを同時に実行した場合は、2 つのストレージ アカウントがデプロイされ、デプロイ履歴には 2 つのエントリが存在します。
同時デプロイによる競合を回避し、デプロイ履歴に一意のエントリが確実に存在するようにするには、各デプロイに一意の名前を付けます。
次のステップ
- エラーが発生したときに正常なデプロイにロールバックするには、「デプロイが成功した場合 のエラー時のロールバック」を参照してください。
- リソース グループに存在するが、テンプレートで定義されていないリソースを処理する方法を指定するには、 Azure Resource Manager のデプロイ モードに関するページを参照してください。
- 非同期 REST 操作の処理については、「 非同期 Azure 操作の追跡」を参照してください。
- テンプレートの詳細については、「 ARM テンプレートの構造と構文を理解する」を参照してください。