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

このクイックスタートでは、Bicep ファイルを使ってテンプレート スペックの作成とデプロイを行う方法について説明します。 組織内のユーザーが Microsoft Azure にリソースをデプロイできるよう、テンプレート スペックはリソース グループにデプロイされます。 テンプレート スペックを使うと、デプロイ テンプレートを共有でき、Bicep ファイルを変更するためのアクセス権をユーザーに与える必要がありません。 このテンプレート スペックの例では、Bicep ファイルを使ってストレージ アカウントをデプロイします。

テンプレート スペックを作成すると、Bicep ファイルが JavaScript Object Notation (JSON) にトランスパイルされます。 テンプレート スペックでは、JSON を使って Azure リソースがデプロイされます。 現在、Microsoft Azure portal を使って Bicep ファイルをインポートし、テンプレート スペック リソースを作成することはできません。

前提条件

Bicep ファイルを作成する

ローカル環境の Bicep ファイルからテンプレート スペックを作成します。 次のサンプルをコピーし、お使いのコンピューターに main.bicep として保存します。 この例では、パス C:\templates\main.bicep を使います。 異なるパスを使ってもかまいませんが、コマンドを変更する必要があります。

PowerShell」と「CLI」のタブでは、次の Bicep ファイルを使います。 「Bicep ファイル」のタブでは、Bicep と JSON を組み合わせてテンプレート スペックを作成してデプロイする別のテンプレートを使います。

@allowed([
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GRS'
  'Standard_GZRS'
  'Standard_LRS'
  'Standard_RAGRS'
  'Standard_RAGZRS'
  'Standard_ZRS'
])
@description('Storage account type.')
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountNameOutput string = storageAccount.name

テンプレート スペックの作成

テンプレート スペックは、Microsoft.Resources/templateSpecs という名前のリソースの種類です。 テンプレート スペックを作成するには、Azure CLI、Azure PowerShell、または Bicep ファイルを使います。

この例では、templateSpecRG という名前のリソース グループを使います。 異なる名前を使ってもかまいませんが、コマンドを変更する必要があります。

  1. テンプレート スペックを含む新しいリソース グループを作成します。

    New-AzResourceGroup `
      -Name templateSpecRG `
      -Location westus2
    
  2. そのリソース グループ内にテンプレート スペックを作成します。 新しいテンプレート スペックに storageSpec という名前を付けます。

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "1.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "C:\templates\main.bicep"
    

テンプレート スペックのデプロイ

テンプレート スペックを使ってストレージ アカウントをデプロイします。 この例では、storageRG という名前のリソース グループを使います。 異なる名前を使ってもかまいませんが、コマンドを変更する必要があります。

  1. 新しいストレージ アカウントを格納するリソース グループを作成します。

    New-AzResourceGroup `
      -Name storageRG `
      -Location westus2
    
  2. テンプレート スペックのリソース ID を取得します。

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
    
  3. テンプレート スペックをデプロイします。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. Bicep ファイルのデプロイとまったく同じようにパラメーターを指定します。 ストレージ アカウントの種類のパラメーターを指定して、テンプレート スペックを再デプロイします。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageAccountType Standard_GRS
    

アクセス権の付与

組織内の他のユーザーがテンプレート スペックをデプロイできるようにするには、そのユーザーに読み取りアクセス権を付与する必要があります。 共有するテンプレート スペックを含むリソース グループの Microsoft Entra グループに閲覧者ロールを割り当てることができます。 詳細については、チュートリアル: Azure PowerShell を使用して Azure リソースへのアクセス権をグループに付与する」を参照してください。

Bicep ファイルを更新する

テンプレート スペックが作成された後、Bicep ファイルを更新することを決定しました。 「PowerShell」または「CLI」のタブの例を続けるには、サンプルをコピーして、main.bicep ファイルを置き換えてください。

パラメーター storageNamePrefix では、ストレージ アカウント名のプレフィックス値を指定します。 変数 storageAccountName は、プレフィックスと一意の文字列を連結します。

@allowed([
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GRS'
  'Standard_GZRS'
  'Standard_LRS'
  'Standard_RAGRS'
  'Standard_RAGZRS'
  'Standard_ZRS'
])
@description('Storage account type.')
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

@maxLength(11)
@description('The storage account name prefix.')
param storageNamePrefix string = 'storage'

var storageAccountName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountNameOutput string = storageAccount.name

テンプレート スペックのバージョンの更新

変更したテンプレートに対して新しいテンプレート スペックを作成するのではなく、2.0 という名前の新しいバージョンを既存のテンプレート スペックに追加します。ユーザーはいずれかのバージョンを選択んでデプロイできます。

  1. 新しいバージョンのテンプレート スペックを作成します。

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "2.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "C:\templates\main.bicep"
    
  2. 新しいバージョンをデプロイするには、2.0 バージョンのリソース ID を取得します。

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
    
  3. 新しいバージョンをデプロイし、storageNamePrefix を使ってストレージ アカウント名のプレフィックスを指定します。

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageNamePrefix "demo"
    

リソースをクリーンアップする

このクイックスタートでデプロイしたリソースをクリーンアップするには、両方のリソース グループを削除します。 リソース グループ、テンプレート スペック、ストレージ アカウントが削除されます。

Azure PowerShell または Azure CLI を使って、リソース グループを削除します。

Remove-AzResourceGroup -Name "templateSpecRG"

Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG

az group delete --name storageRG

次のステップ