テンプレートをモジュール化する
Azure Resource Manager テンプレートを使用する場合は、それらを個々のコンポーネントに分割してモジュール化することをお勧めします。
これを使用する主な方法として、リンクされたテンプレートを使います。
これにより、ソリューションをターゲット コンポーネントに分割し、さまざまなデプロイでそれらのいろいろな要素を再利用できます。
リンク済みテンプレート
あるテンプレートを別のテンプレートにリンクするには、デプロイ リソースをメイン テンプレートに追加します。
"resources": [
{
"apiVersion": "2017-05-10",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
<link-to-external-template>
}
}
]
入れ子になったテンプレート
また、テンプレートをメイン テンプレート内に入れ子にし、テンプレート プロパティを使用して、テンプレートの構文を指定することもできます。
これは、モジュール化に役立ちますが、さまざまなコンポーネントを分割すると、すべての要素が 1 つのファイル内にあるため、メイン ファイルのサイズが大きくなります。
"resources": [
{
"apiVersion": "2017-05-10",
"name": "nestedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageName')]",
"apiVersion": "2015-06-15",
"location": "West US",
"properties": {
"accountType": "Standard_LRS"
}
}
]
}
}
}
]
Note
入れ子になったテンプレートの場合、入れ子になったテンプレート自体で定義されているパラメーターや変数は使用できません。 メイン テンプレートからのパラメーターと変数のみを使用できます。
デプロイ リソースに提供するプロパティは、外部テンプレートへのリンクか、またはメイン テンプレート内のインライン テンプレートの入れ子かによって異なります。
配置モード
テンプレートを使用してリソースをデプロイする場合、次の 3 つの選択肢があります。
- 検証。 このオプションは、テンプレートをコンパイルし、デプロイを検証して、テンプレートが機能していること (たとえば、循環依存の関係がないこと)、および、正しい構文であることを保証します。
- 増分モード (既定)。 このオプションでは、テンプレートに定義されているものだけがデプロイされます。 テンプレートで定義されていないリソースは削除または変更されません。 たとえば、テンプレートを使用して VM をデプロイし、テンプレート内で VM の名前を変更した場合、テンプレートの再実行後も、最初にデプロイされた VM はそのまま残ります。 これは既定のモードです。
- 完全モード: Resource Manager は、リソース グループに存在するがテンプレートで指定されていないリソースを削除します。 たとえば、テンプレートをデプロイした後、テンプレートで定義されたリソースのみがリソース グループに存在します。 ベスト プラクティスとして、運用環境でこのモードを使用して、展開テンプレートでべき等を実現します。
PowerShell を使用してデプロイする場合、配置モードを設定するには、このトピックで前述した入れ子になったテンプレートの例に従って、Mode パラメーターを使用します。
Note
ベスト プラクティスとして、デプロイごとに 1 つのリソース グループを使用します。
Note
リンクされたテンプレートと入れ子になっているテンプレートの両方で使用できるのは、incremental
デプロイ モードのみです。
外部テンプレートと外部パラメーター
外部のテンプレートおよびパラメーター ファイルにリンクするには、templateLink と parametersLink を使用します。
テンプレートにリンクするときは、Resource Manager サービスがそのテンプレートに確実にアクセスできるようにします。
たとえば、ローカル ファイルまたはローカル ネットワーク上でのみ使用可能なファイルを指定することはできません。
HTTP または HTTPS を含む Uniform Resource Identifier (URI) 値のみを指定できます。
1 つの選択肢として、リンクされているテンプレートをストレージ アカウントに配置し、その項目の URI を使用する方法があります。
インラインでパラメーターを指定することもできます。 ただし、インライン パラメーターとパラメーター ファイルへのリンクの両方を使用することはできません。
次の例では、templateLink パラメーターを使用します。
"resources": [
{
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2018-05-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri":"https://linkedtemplateek1store.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json?sv=2018-03-28&sr=b&sig=dO9p7XnbhGq56BO%2BSW3o9tX7E2WUdIk%2BpF1MTK2eFfs%3D&se=2018-12-31T14%3A32%3A29Z&sp=r"
},
"parameters": {
"storageAccountName":{"value": "[variables('storageAccountName')]"},
"location":{"value": "[parameters('location')]"}
}
}
},
外部テンプレートのセキュリティ保護
リンクされているテンプレートは外部で使用できる必要がありますが、一般に公開する必要はありません。
代わりに、ストレージ アカウント所有者のみがアクセスできるプライベート ストレージ アカウントにテンプレートを追加し、デプロイ時にアクセスを有効にするための Shared Access Signature (SAS) トークンを作成することができます。
リンクされたテンプレートの URI に SAS トークンを追加します。
トークンがセキュリティで保護された文字列として渡される場合でも、SAS トークンを含むリンクされているテンプレートの URI は、デプロイ操作でログに記録されます。
公開を制限するために、トークンの有効期限を設定することもできます。