テンプレート スペックを管理する

完了

テンプレート スペックは、テンプレートを発行して組織内で共有するための便利な手段となります。 テンプレート スペックの使用頻度が増えるにつれて、その管理方法を理解することが重要になってきます。

このユニットでは、バージョン管理、テンプレート スペックの編集と削除の方法、テンプレート スペックへのアクセスを制御する方法について学習します。

注意

このユニットのコマンドは、概念を説明するために示されています。 コマンドはまだ実行しないでください。 ここで学習した内容をすぐに練習します。

バージョンを追加する

1 つのテンプレート スペックに複数のバージョンを含めることができることを学習しました。 テンプレート スペックは、1 つまたは複数のバージョンのコンテナーとしての役割を担っており、それぞれのバージョンがテンプレート ファイルに関連付けられます。 テンプレート スペックをデプロイする際は、使用するバージョンを指定して、取得するテンプレート ファイルを Azure Resource Manager に伝える必要があります。

Azure CLI や Azure PowerShell を使用すれば、複数のバージョンを容易に扱うことができます。 実際、皆さんは、前の演習でテンプレート スペックをデプロイするときに既にバージョンを使用しています。

テンプレート スペックのバージョンをどう管理するかは、慎重に計画することをお勧めします。 2 つの重要な決定事項は、使用する ''バージョン管理スキーム'' と ''バージョン管理ポリシー'' です。

バージョン管理スキーム

バージョン番号の生成方法は、バージョン管理スキームによって決まります。 一般的なバージョン管理スキームの例を次に示します。

  • "基本的な整数" は、バージョン番号として使用できます。 たとえば最初のバージョンを 1、2 番目のバージョンを 2、のようにします。
  • "日付" もバージョン番号に適しています。 たとえばテンプレート スペックの最初のバージョンを 2021 年 1 月 16 日に発行した場合、そのバージョンには 2021-01-16 という名前を付けることが考えられます (yyyy-mm-dd 形式を使用)。 3 月 3 日に別のバージョンを発行した場合は、2021-03-03 という名前にすることができます。
  • "セマンティック バージョン管理" は、ソフトウェアでよく使用されるバージョン管理システムであり、1 つのバージョン番号が複数の要素で構成されます。 変更の性質に関するさまざまな情報が、それぞれの構成要素によって表されます。

任意のバージョン管理スキームを使用できますが、数値や日付など、並べ替えたときに意味のある順序になるものを選ぶのが得策です。

Note

各バージョンが作成された日付は、Azure に保存されています。 日付ベースのバージョン管理を使用しなくても、この情報は確認できます。

バージョン管理ポリシー

テンプレート スペックでは、どのようなときに新しいバージョンを作成するかや既存のバージョンを更新するかを柔軟に選択できます。 たとえば、latest という名前のバージョンを 1 つ作成して発行すれば、実質的にバージョン管理の不使用を選択できます。 テンプレート スペックに変更を加える必要が生じるたびに、そのバージョンを単純に更新します。 このポリシーでも正しく機能しますが、よい方法ではありません。

逆に、使用に影響しない既存のテンプレートに小さな変更を加えた場合、新しいバージョンを作成することは得策とは言えないでしょう。 そのテンプレート スペックを使用するすべてのユーザーに新しいバージョン番号を伝えなければなりません。

多くの場合に適切な結果が得られるバージョン管理ポリシーを次に示します。

  • 重大な変更をテンプレート スペックに加えるたびに、新しいバージョンを作成します。 テンプレート スペックの重大な変更には、それをデプロイするユーザーに影響を与える可能性があるものが含まれます。 たとえば、テンプレートに別のリソースを追加したり、リソースのプロパティを変更したりする場合です。
  • テンプレート スペックに小さな変更 (場合によっては "修正プログラム" と呼ばれます) を加えるたびに、既存のテンプレート スペック バージョンを更新します。
  • 古くなって妥当性を失ったバージョンやだれにも使って欲しくないバージョンは削除します。

ヒント

テンプレート スペックのユーザーの立場に立って、期待される動作を考えるようにしてください。 テンプレート スペックを複数回デプロイして 1 つの結果が得られるとします。その後、修正プログラム適用後にデプロイした結果が異なると、ユーザーは驚いてしまうでしょう。 ユーザーにとって想定外の結果が生じる可能性を極力減らすように努めてください。

バージョンの説明

テンプレート スペックの新しいバージョンを作成するときに、必要に応じてバージョンの説明を指定できます。 必要がない場合でも、バージョンの説明を指定することをお勧めします。 加えられた変更がバージョンの説明に要約されていれば、テンプレート スペックを使用するすべてのユーザーが、ニーズに最も適したバージョンを選択するのに役立ちます。

テンプレート スペックに変更を加える

テンプレート スペックは Azure リソースであるため、他のあらゆるリソースと同じように管理できます。 つまり、普通にテンプレート スペックの詳細を表示したり、更新したり、削除したりすることが可能です。

たとえばテンプレート スペックのバージョンを一覧表示するには、Get-AzTemplateSpec コマンドレットを使用します。

Get-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec

テンプレート スペックのバージョンを表示する際も同じコマンドレットを使用します。 -Version パラメーターを追加すると、バージョンの詳細が表示されます。

Get-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0

JSON テンプレートには、Versions 配列内から MainTemplate プロパティを読み取ることでアクセスできます。

(Get-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0 `
).Versions[0].MainTemplate

たとえばテンプレート スペックのバージョンを一覧表示するには、az ts show コマンドを使用します。

az ts show \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec

テンプレート スペックのバージョンを表示する際も同じコマンドを使用します。 --version 引数を追加すると、バージョンの詳細が表示されます。

az ts show \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec \
  --version 1.0

出力には JSON テンプレートが含まれています。

Note

Bicep ファイルは、テンプレート スペックに発行すると JSON に変換されます。 元の Bicep ファイルは見えなくなるため、どこか他の場所に保管しておくことをお勧めします。

既存のテンプレート スペックを更新するには、Set-AzTemplateSpec コマンドレットを使用します。 たとえば、このコマンドレットを使用すると、発行済みのバージョンに修正プログラムを適用できます。

Set-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0 `
  -TemplateFile azuredeploy.json

また、Remove-AzTemplateSpec コマンドレットを使用すると、テンプレート スペック バージョンを削除することができます。

Remove-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0

既存のテンプレート スペックを更新するには、az ts update コマンドを使用します。 たとえば、このコマンドを使用すると、発行済みのバージョンに修正プログラムを適用できます。

az ts update \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec \
  --version 1.0 \
  --template-file azuredeploy.json

また、az ts delete コマンドを使用すると、テンプレート スペック バージョンを削除することができます。

az ts delete \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec \
  --version 1.0

テンプレート スペックをエクスポートする

テンプレートをテンプレート スペックとして発行した後、それを "エクスポート" することができます。 テンプレート スペックをエクスポートすると、テンプレート ファイルがローカル コンピューターにダウンロードされます。 そこでテンプレート ファイルを編集するか、または単に確認して処理の内容を把握することができます。

ヒント

リンクされたテンプレートがテンプレート スペックに含まれている場合、テンプレート スペックをエクスポートすると、リンクされたテンプレートもダウンロードされます。 フォルダー構造も保持されます。

重要

Bicep ファイルをテンプレート スペックとして発行すると、Bicep コードが JSON テンプレートに変換されます。 Bicep コードを JSON に変換する処理によって、Bicep ファイルから情報の一部が削除されます。 たとえばコメント、リソースのシンボル名、リソースの定義順が、JSON では失われたり変更されたりする場合があります。 つまり Bicep ファイルをテンプレート スペックとして発行した後、元の Bicep ファイルを復元すること (これを "ラウンドトリップ" ともいいます) は、容易ではありません。 特にテンプレート スペックを扱う際には、元の Bicep コードを、Git などのコード リポジトリに保管しておくことをお勧めします。

テンプレート スペックをエクスポートするには、Export-AzTemplateSpec コマンドレットを使用します。 テンプレート ファイルの保存先は、-OutputFolder の値を使用して指定します。

Export-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0 `
  -OutputFolder ./mytemplate

テンプレート スペックをエクスポートするには、az ts export コマンドを使用します。 テンプレート ファイルの保存先は、--output-folder の値を使用して指定します。

az ts export \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec \
  --version 1.0 \
  --output-folder ./mytemplate

テンプレート スペックへのアクセスを制御する

テンプレート スペックは Azure リソースであるため、Azure の ID およびアクセス管理 (IAM) が使用されます。 ユーザーがテンプレート スペックをデプロイする際、テンプレート スペックを読み取るためのアクセス権がそのユーザーにあるかどうかが Azure によって最初にチェックされます。

Note

テンプレート スペックをデプロイするには、ユーザーに次のものが必要です。

  • テンプレート スペックを読み取るためのアクセス権。
  • リソース グループなど、意図したスコープにデプロイするためのアクセス権。

デプロイが開始される前に、両方の条件が Azure によってチェックされます。