Azure PowerShell を使用してテンプレートをエクスポートする

Azure Resource Manager テンプレートの作成に役立てるために、既存のリソースからテンプレートをエクスポートできます。 エクスポートされたテンプレートを使用すると、リソースをデプロイする JSON の構文とプロパティを理解できます。 今後のデプロイを自動化するには、まずエクスポートされたテンプレートから始めて、シナリオに合わせて変更します。 テンプレートのエクスポート プロセスは、使用可能なテンプレートを作成しようとします。 ただし、エクスポートされたほとんどのテンプレートは、Azure リソースのデプロイに使用する前に、いくつかの変更が必要です。

Resource Manager では、テンプレートにエクスポートするリソースを 1 つまたは複数選択できます。 テンプレートに必要なリソースにのみ集中することができます。

この記事では、Azure PowerShell を使用してテンプレートをエクスポートする方法を示します。 その他のオプションについては、以下を参照してください。

適切なエクスポート オプションを選択する

テンプレートをエクスポートするには、次の 2 とおりの方法があります。

  • リソース グループまたはリソースからのエクスポート。 このオプションでは、既存のリソースから新しいテンプレートを生成します。 エクスポートされたテンプレートは、リソース グループの現在の状態の "スナップショット" です。 リソース グループ全体、またはそのリソース グループ内の特定のリソースをエクスポートできます。

  • 履歴から保存。 このオプションでは、デプロイに使用されたテンプレートのそのままのコピーを取得します。 デプロイ履歴からデプロイを指定します。

選択したオプションに応じて、エクスポートされたテンプレートの品質は異なります。

リソース グループまたはリソースから 履歴から
テンプレートは自動生成されます。 コードをデプロイする前に、改善する必要がある場合があります。 テンプレートは、テンプレート作成者によって作成されたコピーの正確なコピーです。 変更なしで再デプロイできる状態です。
テンプレートは、リソースの現在の状態のスナップショットです。 デプロイ後に手動で行った変更も含まれます。 テンプレートにはデプロイ時点のリソースの状態のみが表示されます。 デプロイ後に手動で行った変更は含まれません。
リソース グループからエクスポートするリソースを選択できます。 特定のデプロイに関するすべてのリソースが含まれます。 これらのリソースのサブセットを選択したり、別の時点で追加されたリソースを追加したりすることはできません。
テンプレートには、通常はデプロイ中に設定しない一部のプロパティを含め、リソースのすべてのプロパティが含まれています。 テンプレートを再利用する前に、このようなプロパティを削除またはクリーンアップすることをお勧めします。 テンプレートには、デプロイに必要なプロパティのみが含まれています。 テンプレートはよりスパースであり、読みやすくなっています。
テンプレートには、再利用に必要なすべてのパラメーターが含まれていない場合もあります。 ほとんどのプロパティ値は、テンプレートにハードコーディングされています。 他の環境でテンプレートを再デプロイするには、リソースを構成する機能を高めるパラメーターを追加する必要があります。 独自のパラメーターを作成できるように、 [パラメーターを含める] を選択解除できます。 テンプレートには、さまざまな環境での再デプロイが簡単になるパラメーターが含まれています。

次の場合に、リソース グループまたはリソースからテンプレートをエクスポートします。

  • 元のデプロイ後に行われたリソースへの変更をキャプチャする必要がある。
  • エクスポートするリソースを選択したい。
  • テンプレートを使用してリソースを作成していない。

次の場合に、履歴からテンプレートをエクスポートします。

  • 再利用しやすいテンプレートがほしい。
  • 元のデプロイ後に行った変更を含める必要はない。

制限事項

エクスポートが成功するという保証はありません。 エクスポートは、既存のリソースを運用環境で使用できるテンプレートに変換するための信頼性の高い方法ではありません。 手書きの Bicep ファイルARM テンプレート、または terraform を使用して、リソースを最初から作成することをお勧めします。

リソースグループまたはリソースからエクスポートする場合、エクスポートされたテンプレートは、リソースの種類ごとに パブリッシュされたスキーマ から生成されます。 場合によっては、スキーマにリソースの種類に対する最新バージョンがないことがあります。 エクスポートしたテンプレートに必要なプロパティが含まれていることを確認してください。 必要に応じて、エクスポートされたテンプレートを編集し、必要な API バージョンを使用します。

一部のパスワード パラメーターが、エクスポートされたテンプレートから欠落している可能性があります。 テンプレートを使用してリソースをデプロイする前に、テンプレート参照を確認し、これらのパラメーターを手動で追加する必要があります。

テンプレートのエクスポート機能は、Azure Data Factory リソースのエクスポートをサポートしていません。 Data Factory リソースをエクスポートする方法については、「Azure Data Factory のデータ ファクトリをコピーまたは複製する」を参照してください。

クラシック デプロイ モデルを使用して作成されたリソースをエクスポートするには、Resource Manager デプロイ モデルに移行する必要があります。

テンプレートをエクスポートしたとき、リソースの種類がエクスポートされなかったという警告が表示された場合でも、そのリソースのプロパティを検出できます。 リソースのプロパティについては、テンプレート リファレンスを参照してください。 リソースの種類については、Azure REST API も参照できます。

エクスポートされたテンプレートを作成するリソース グループには、200 リソースという制限があります。 200 を超えるリソースを持つリソース グループをエクスポートしようとすると、エラー メッセージ Export template is not supported for resource groups more than 200 resources が表示されます。

リソース グループからテンプレートをエクスポートする

リソース グループを設定したら、リソース グループの Azure Resource Manager テンプレートをエクスポートできます。

リソース グループ内のすべてのリソースをエクスポートするには、Export-AzResourceGroup コマンドレットを使用して、リソース グループ名を指定します。

Export-AzResourceGroup -ResourceGroupName demoGroup

これでテンプレートはローカル ファイルとして保存されます。

リソース グループ内のすべてのリソースをエクスポートする代わりに、どのリソースをエクスポートするかを選択できます。

1 つのリソースをエクスポートするには、そのリソースの ID を渡します。

$resource = Get-AzResource `
  -ResourceGroupName <resource-group-name> `
  -ResourceName <resource-name> `
  -ResourceType <resource-type>
Export-AzResourceGroup `
  -ResourceGroupName <resource-group-name> `
  -Resource $resource.ResourceId

複数のリソースをエクスポートするには、リソース ID を配列で渡します。

Export-AzResourceGroup `
  -ResourceGroupName <resource-group-name> `
  -Resource @($resource1.ResourceId, $resource2.ResourceId)

テンプレートをエクスポートするときには、テンプレート内でパラメーターを使用するかどうかを指定できます。 既定では、リソース名用のパラメーターが含められますが、既定値はありません。

"parameters": {
  "serverfarms_demoHostPlan_name": {
    "type": "String"
  },
  "sites_webSite3bwt23ktvdo36_name": {
    "type": "String"
  }
}

テンプレートをエクスポートするときに -SkipResourceNameParameterization パラメーターを使用する場合、リソース名用のパラメーターはテンプレートに含められません。 代わりに、リソース名はリソースに対して直接、現在の値に設定されます。 この名前はデプロイ時にカスタマイズすることはできません。

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-09-01",
    "name": "demoHostPlan",
    ...
  }
]

テンプレートをエクスポートするときに -IncludeParameterDefaultValue パラメーターを使用する場合、テンプレート パラメーターには、現在の値に設定される既定値が含められます。 その既定値を使用することも、異なる値を渡して既定値を上書きすることもできます。

"parameters": {
  "serverfarms_demoHostPlan_name": {
    "defaultValue": "demoHostPlan",
    "type": "String"
  },
  "sites_webSite3bwt23ktvdo36_name": {
    "defaultValue": "webSite3bwt23ktvdo36",
    "type": "String"
  }
}

デプロイ履歴からのテンプレートの保存

デプロイ履歴に含まれているデプロイからテンプレートを保存できます。 取得するテンプレートは、デプロイに使用されたものとまったく同じです。

リソース グループのデプロイからテンプレートを取得するには、Save-AzResourceGroupDeploymentTemplate コマンドを使用します。 取得するデプロイの名前を指定します。 デプロイの名前を取得する方法については、「Azure Resource Manager でのデプロイ履歴の表示」を参照してください。

Save-AzResourceGroupDeploymentTemplate -ResourceGroupName demoGroup -DeploymentName demoDeployment

テンプレートは、デプロイの名前を含むローカル ファイルとして保存されます。

他のレベルでデプロイされたテンプレートを取得するには、以下を使用します。

次のステップ