テンプレート スペックをデプロイする

完了

テンプレート スペックを作成して発行したら、それをデプロイできます。 このユニットでは、テンプレート スペックをデプロイする方法について学習します。

テンプレート スペックを使用してデプロイを作成する

テンプレート スペックをリソース グループにデプロイするには、使い慣れた同じ New-AzResourceGroupDeployment コマンドレットを使用します。 テンプレート ファイルを指定する代わりに、テンプレート スペックのリソース ID を指定します。その例を次に示します。

New-AzResourceGroupDeployment `
  -TemplateSpecId '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/SharedTemplates/providers/Microsoft.Resources/templateSpecs/StorageWithoutSAS'

テンプレート スペックはリソース グループ内に作成する必要がありますが、そのデプロイ先は、サブスクリプションや管理グループ、またはテナントでもかまいません。デプロイには、こちらのコマンドレットを使用します。

このスコープにデプロイするには: 次の PowerShell コマンドレットを使用します。
Resource group New-AzResourceGroupDeployment
サブスクリプション New-AzSubscriptionDeployment
管理グループ New-AzManagementGroupDeployment
Tenant New-AzTenantDeployment

これらのコマンドレットはそれぞれ、-TemplateSpecId パラメーターを受け取り、対応するいずれかのスコープでテンプレート スペックのデプロイを開始します。

テンプレート スペックをリソース グループにデプロイするには、使い慣れた同じ az deployment group create コマンドを使用します。 テンプレート ファイルを指定する代わりに、テンプレート スペックのリソース ID を指定します。その例を次に示します。

az deployment group create \
  --template-spec "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/SharedTemplates/providers/Microsoft.Resources/templateSpecs/StorageWithoutSAS"

テンプレート スペックはリソース グループ内に作成する必要がありますが、そのデプロイ先は、サブスクリプションや管理グループ、またはテナントでもかまいません。デプロイには、こちらのコマンドを使用します。

このスコープにデプロイするには: 次の Azure CLI コマンドを実行します。
Resource group az deployment group create
サブスクリプション az deployment sub create
管理グループ az deployment mg create
Tenant az deployment tenant create

これらのコマンドはそれぞれ、--template-spec 引数を受け取り、対応するいずれかのスコープでテンプレート スペックのデプロイを開始します。

リンクされたデプロイとしてテンプレート スペックを使用する

テンプレート スペックを別の Azure Resource Manager テンプレート (ARM テンプレート) 内から使用するには、テンプレート スペックを使用するデプロイを作成します。この種類のデプロイは、"リンクされたデプロイ" と呼ばれます。これは、外部で指定されたデプロイ テンプレートにリンクしているためです。

Azure におけるデプロイとは、Microsoft.Resources/deployments という種類のリソースです。 ARM テンプレートをデプロイする際は、デプロイ リソースを作成することになります。 テンプレート スペックをデプロイする際も、同じ概念が当てはまります。その例を次に示します。

{
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2020-10-01",
  "name": "createStorage",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "id": "[resourceId('Microsoft.Resources/templateSpecs/versions', variables('templateSpecName'), variables('templateSpecVersion'))]"
    }
  }
}

テンプレート スペックのデプロイに渡すパラメーターがあるときは、parameters プロパティを使用します。

{
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2020-10-01",
  "name": "createStorage",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "id": "[resourceId('Microsoft.Resources/templateSpecs/versions', variables('templateSpecName'), variables('templateSpecVersion'))]"
    },
    "parameters": {
      "storageAccountName": {
        "value": "[parameters('storageAccountName')]"
      }
    }
  }
}

テンプレート スペックを Bicep モジュールとして使用する

テンプレート スペックは、Bicep ファイル内のモジュールとして使うことができます。

module storageAccountTemplateSpec 'ts:f0750bbe-ea75-4ae5-b24d-a92ca601da2c/sharedTemplates/StorageWithoutSAS:1.0' = {
  name: 'storageAccountTemplateSpec'
}

モジュール パスには特殊な形式が使用されていることに注目してください。

Diagram showing the components of the template spec path.

モジュール パスには、コロン (:) 文字で区切られた 3 つの構成要素があります。

  • スキーム: Bicep では、"スキーム" と呼ばれるいくつかの種類のモジュールがサポートされています。 テンプレート スペックをモジュールとして使用する場合は、ts をスキームとして使用します。
  • サブスクリプション ID、リソース グループ名、テンプレート スペック名:これらの値は、前に発行したテンプレート スペック リソースの場所を指定する必要があります。 スラッシュ (/) を使用して、サブスクリプション ID、リソースグループ名、テンプレート スペック名を区切ります。 モジュール パスのこのセクションは、テンプレート スペックの完全なリソース ID ではありません。これは、リソース ID の構成要素のほんの一部です。
  • バージョン: テンプレート スペックのバージョンを含める必要があります。

Note

モジュールへのパスを指定するときに、変数、パラメーター、または文字列補間を使用することはできません。 完全なテンプレート スペック パスは、Bicep ファイルに保存する必要があります。

テンプレート スペックに渡すパラメーターがあるときは、params プロパティを使用します。

module storageAccountTemplateSpec 'ts:f0750bbe-ea75-4ae5-b24d-a92ca601da2c/sharedTemplates/StorageWithoutSAS:1.0' = {
  name: 'storageAccountTemplateSpec'
  params: {
    storageAccountName: storageAccountName
  }
}

Bicep ファイルがビルドされると、テンプレート スペック ファイルがダウンロードされ、JSON ARM テンプレートにコピー ("トランスパイル") されます。 この操作は通常、Bicep ファイルをデプロイするときに行われますが、Bicep ツールを使って、bicep build コマンドを実行して明示的にトランスパイルすることもできます。