テンプレート スペックを作成、発行する

完了

テンプレート スペックを作成、発行する方法について見ていきましょう。

テンプレートの作成

テンプレート スペックとして使用するテンプレートを作成するには、普段と同じように Azure Resource Manager テンプレート (ARM テンプレート) を作成します。 パラメーター、変数、リソース、出力を含めることができます。

"リンクされたテンプレート" を使用することもできます。これにより、デプロイの一部を別個のファイルに定義することができます。 作業対象のテンプレート スペックに、リンクされたテンプレートを埋め込んでメイン テンプレートから参照することができます。

テンプレート、特にそのパラメーターは、組織内のすべてのユーザーにとってわかりやすく、そして使いやすいものであることが大切です。 明確でわかりやすいパラメーター名を使用してください。 パラメーターの内容として想定される値についての情報は、パラメーターのプロパティとテンプレートのメタデータを使用して指定します。その例を次に示します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "environmentType": {
      "type": "string",
      "allowedValues": [
        "Production",
        "NonProduction"
      ],
      "metadata": {
        "description": "The type of the environment to deploy. This will determine the SKUs and cost of the resources."
      }
    },
    "key": {
      "type": "secureString",
      "metadata": {
        "description": "The secret key to use."
      }
    },
    "location": {
      "type": "string",
      "metadata": {
        "description": "The Azure region into which the resources should be deployed."
      }
    },
    "sqlServerCount": {
      "type": "int",
      "maxValue": 5,
      "metadata": {
        "description": "The number of Azure SQL logical servers to create."
      }
    }
  },
  "resources": []
}

この例では、テンプレート パラメーターに allowedValuesmaxValuedescription の各プロパティが使用されていて、各パラメーターの目的と、その設定値の効果が明確に示されています。 また、テンプレートには secureString 型が含まれていて、key パラメーターにはシークレット データが格納されることがわかります。

テンプレート、特にそのパラメーターは、組織内のすべてのユーザーにとってわかりやすく、そして使いやすいものであることが大切です。 明確でわかりやすいパラメーター名を使用してください。 パラメーターの内容として想定される値についての情報は、パラメーターのデコレーターを使用して指定します。その例を次に示します。

@description('The type of the environment to deploy. This will determine the SKUs and cost of the resources.')
@allowed([
  'Production'
  'NonProduction'
])
param environmentType string

@secure()
@description('The secret key to use.')
param key string

@description('The Azure region into which the resources should be deployed.')
param location string

@description('The number of Azure SQL logical servers to create.')
@maxValue(5)
param sqlServerCount int

この例では、テンプレートのパラメーターに @allowed@maxValue@description の各デコレーターが使用されていて、各パラメーターの目的と、その設定値の効果が明確に示されています。 また、テンプレートには secure デコレーターが含まれていて、key パラメーターにはシークレット データが格納されることがわかります。

だれかが Azure portal を使用してテンプレート スペックをデプロイするとき、ポータルは次のように動作します。

  • パラメーターの名前と説明が表示されます。
  • セキュリティで保護されたパラメーターに対するテキスト入力は非表示になります。
  • 指定できる値、長さの制限、値の制限が、定義したとおりに適用されます。

このスクリーンショットは、パラメーターの値の入力例を示しています。

Screenshot that shows the Azure portal interface for entering parameter values for a template spec deployment.

ユーザーがテンプレート スペックを使用する方法を考慮し、パラメーターを確実に明確でわかりやすいようにすることが重要です。

テンプレート スペックを Azure に発行する

テンプレートが作成された後、そのテンプレートをデプロイ用に Azure に送信するのではなく、テンプレート スペックを発行します。

重要

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

テンプレート スペックを作成するには、New-AzTemplateSpec コマンドレットを使用します。 次に示したのは、ストレージ アカウント テンプレート用のテンプレート スペックを作成する例です。

New-AzTemplateSpec `
  -Name StorageWithoutSAS `
  -Location westus `
  -DisplayName 'Storage account with SAS disabled' `
  -Description 'This template spec creates a storage account, which is preconfigured to disable SAS authentication.' `
  -Version '1.0' `
  -TemplateFile main.bicep
New-AzTemplateSpec `
  -Name StorageWithoutSAS `
  -Location westus `
  -DisplayName 'Storage account with SAS disabled' `
  -Description 'This template spec creates a storage account, which is preconfigured to disable SAS authentication.' `
  -Version '1.0' `
  -TemplateFile azuredeploy.json

各パラメーターを見てみましょう。

  • -Name は、テンプレート スペックのリソース名です。スペースを含めることはできません。
  • -Location は、テンプレート スペックのメタデータの作成先となる場所です。 ただしテンプレート スペックは、任意のリージョンにデプロイすることができます。
  • -DisplayName は、人が判読できる名前です。スペースを含めることができます。
  • -Description は、人が判読できる説明です。テンプレート スペックがどのような内容で、どのようなときに使用できるのかについて、詳細な情報を指定することができます。
  • -Version はテンプレート スペックのバージョンです。バージョンについては、このモジュールの後半で説明します。
  • -TemplateFile は、テンプレート スペックの目的である ARM テンプレートのパスです。

テンプレート スペックを作成するには、az ts create コマンドを使用します。 次に示したのは、ストレージ アカウント テンプレート用のテンプレート スペックを作成する例です。

az ts create \
  --name StorageWithoutSAS \
  --location westus \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1.0 \
  --template-file main.bicep
az ts create \
  --name StorageWithoutSAS \
  --location westus \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1.0 \
  --template-file azuredeploy.json

各引数を見てみましょう。

  • --name は、テンプレート スペックのリソース名です。スペースを含めることはできません。
  • --location は、テンプレート スペックのメタデータの作成先となる場所です。 ただしテンプレート スペックは、任意のリージョンにデプロイすることができます。
  • --display-name は、人が判読できる名前です。スペースを含めることができます。
  • --description は、人が判読できる説明です。テンプレート スペックがどのような内容で、どのようなときに使用できるのかについて、詳細な情報を指定することができます。
  • --version はテンプレート スペックのバージョンです。バージョンについては、このモジュールの後半で説明します。
  • --template-file は、テンプレート スペックの目的である ARM テンプレートのパスです。

ヒント

テンプレート スペックは、ARM テンプレート内に定義することもできます。 テンプレート スペック自体は Azure リソースであるため、リソースを定義するテンプレートは、Microsoft.Deployments/templateSpecs という型を使用してデプロイすることができます。