テンプレート スペックについて

完了

Bicep または JSON を使用して Azure Resource Manager テンプレート (ARM テンプレート) を Azure にデプロイする方法については、既にご存じかと思います。 テンプレート ファイルを作成した後、デプロイを作成することによってそれを Azure に送信します。 リソースの作成または再構成が、Azure Resource Manager によって調整されます。

テンプレート スペックを扱う際もやはり、テンプレートは Azure に送信することになります。 しかし、Azure では、それをデプロイせずに、将来使用できるように保存します。 テンプレート スペックのデプロイは、後から改めて Azure に命令することができます。同じテンプレート スペックを繰り返し使用して、追加で環境をデプロイすることも可能です。

テンプレート スペックを使用する理由は何ですか。

玩具会社で、次のような再利用可能なテンプレートを多数作成しました。

テンプレート名 [説明]
ストレージ アカウント ストレージ アカウントをデプロイし、Microsoft Entra 認証を適用します。
Cosmos DB アカウント 継続的バックアップを有効にして Azure Cosmos DB アカウントをデプロイします。
仮想ネットワーク メイン ハブ ネットワークのピアとなる適切な構成を有した仮想ネットワークをデプロイします。
製品販売 Web サイト 新しい玩具の製品販売を大々的に取り上げた Web サイト用の Azure App Service プラン、アプリ、ストレージ アカウントをデプロイします。

テンプレート スペックは、組織内のよくあるシナリオ向けに、再利用可能な ARM テンプレートのライブラリを作成する最適な手段です。 事前構成済みのリソースを 1 つまたは複数含んだテンプレートをエキスパート ユーザーが作成できます。 それをテンプレート スペックとして発行すると、組織内の他のユーザーがそれをデプロイできるようになります。

テンプレート スペックを使用することで、自分のチームによって作成されるリソースが、意図した要件に従って構成されるよう保証することができます。 たとえば、前述のストレージ アカウント テンプレートのようなテンプレート スペックを発行できます。 その後、組織内のすべてのユーザーがテンプレート スペックをデプロイするたびに、適切な認証設定でストレージ アカウントを作成することを確信できます。

テンプレート スペックは Azure 内に保存されるため、共有テンプレート ファイルを自分で管理する必要はありません。 Azure ロールベースのアクセス制御を使って、テンプレート スペックを使用および変更できるユーザーを管理します。 テンプレート スペックがない場合は、テンプレート ファイルの保存場所 (Azure Storage など) を自分で選択しなければなりません。 また、アクセスの制御も自分で行う必要があります。

テンプレート スペックと Bicep モジュールの違い

Bicep を使用すると、再利用可能な "モジュール" を使用して、一連のリソースを 1 つのファイルで定義できます。 テンプレート スペックと Bicep モジュールはどちらもテンプレートに再利用性をもたらす手段ではありますが、それぞれ異なる目的に最適化されています。

  • テンプレート スペックは、完全なテンプレートとしてデプロイ可能に設計されています。 Azure portal と、Azure CLI や Azure PowerShell などのツールを使用して、テンプレート スペックをデプロイすることができます。 Bicep モジュールは、より大きなデプロイに結合されることを意図しています。 ただし、テンプレート スペックを作成する場合、必要に応じて Bicep でモジュールとして使用することもできます。
  • テンプレート スペックには、バージョン管理とアクセスの制御の機能があります。 Bicep コードのバージョンとセキュリティは自分で管理する必要があります。
  • テンプレート スペックは Azure 内にリソースとして保存されます。 Bicep モジュールは、Git を始めとするバージョン管理システムやローカル ファイル システムなど、自分の管理下に保存する必要があります。
  • Bicep モジュールには、コメント、シンボル名、空白を含め、元の Bicep コードがすべて保持されます。 Bicep を使用してテンプレート スペックを作成すると Bicep コードが JSON に変換され、そうした情報の一部は失われます。 そのため、どこか別の場所にソース Bicep ファイルも保管しておく必要があります。

テンプレート スペックと Bicep モジュールのどちらを使用するかは、次の基準で判断するとよいでしょう。テンプレートをそのまま組織全体でデプロイする場合には、テンプレート スペックが適していると考えられます。 一方、そのテンプレートを複数の親テンプレート内で再利用したい場合は、Bicep モジュールの方が都合がよいと考えられます。

テンプレート スペックのしくみ

ストレージ アカウントや仮想マシンと同様に、テンプレート スペックも Azure リソースです。 テンプレート自体は、サブスクリプション、管理、テナントのいずれかのスコープにリソースをデプロイできますが、テンプレート スペックはリソース グループ内に作成する必要があります。

テンプレート スペックを使った作業では、次の 2 つのリソースを作成します。

  • "テンプレート スペック" は、コンテナー リソースです。 ここに 1 つまたは複数のバージョンが含まれることになります。
  • "テンプレート スペック バージョン" には、実際にデプロイするテンプレートが含まれています。

テンプレート スペックとバージョンは、それぞれのリソース ID を使用して操作します。 次に示したのは、テンプレート スペックのリソース ID の例です。

/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/SharedTemplates/providers/Microsoft.Resources/templateSpecs/StorageWithoutSAS

バージョンは、テンプレート スペックの子リソースです。この例のようなリソース ID があります。

/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/SharedTemplates/providers/Microsoft.Resources/templateSpecs/StorageWithoutSAS/versions/1.0

テンプレート スペックをデプロイする際は、テンプレート スペック バージョンのリソース ID を指定する必要があります。

次の図は、テンプレート スペックを使用するときに従うワークフローを示しています。

Diagram that shows the workflow for using template specs.

普段と同じようにテンプレートを作成します。 テンプレート スペック向けに作成するテンプレートだからといって特別なことはありません。リソースを宣言したり、パラメーターや変数を作成したり、関数を使用したりします。

テンプレートの準備が整ったら、テンプレート スペック リソースを作成します。 次に、テンプレート スペックにバージョンとしてテンプレートを発行します。 テンプレート スペックの作成に使用するツールでは、これらの手順をすべて 1 回の操作で行うことができます。 テンプレート スペックは、発行後にリソースとして Azure に格納されます。 他のあらゆる Azure リソースと同様に、表示したり、編集したり、アクセスを制御したりすることができます。 テンプレート スペックは、ローカル コンピューターから、またはデプロイ パイプラインから発行することができます。

テンプレート スペックをデプロイする際は必ず、テンプレート スペック バージョンのリソース ID をデプロイから参照します。 デプロイ先はどのリソース グループでもよく、他のサブスクリプションやスコープであってもかまいません。 Azure はテンプレート スペックを読み取り、それをデプロイのテンプレートとして使用します。