クイックスタート: 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@2023-04-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
という名前のリソース グループを使います。 異なる名前を使ってもかまいませんが、コマンドを変更する必要があります。
テンプレート スペックを含む新しいリソース グループを作成します。
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
そのリソース グループ内にテンプレート スペックを作成します。 新しいテンプレート スペックに storageSpec という名前を付けます。
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
テンプレート スペックを含む新しいリソース グループを作成します。
az group create \
--name templateSpecRG \
--location westus2
そのリソース グループ内にテンプレート スペックを作成します。 新しいテンプレート スペックに storageSpec という名前を付けます。
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Bicep ファイルを使ってテンプレート スペックを作成できますが、mainTemplate
は JSON 形式である必要があります。 JSON テンプレートでは、標準の JSON 構文は使いません。 たとえば、行末のコンマはなく、二重引用符の代わりに単一引用符を使い、式に含まれる単一引用符をエスケープするには円記号 (\
) を使います。
次のテンプレートをコピーし、お使いのコンピューターに main.bicep として保存します。
param templateSpecName string = 'storageSpec'
param templateSpecVersionName string = '1.0'
@description('Location for all resources.')
param location string = resourceGroup().location
resource createTemplateSpec 'Microsoft.Resources/templateSpecs@2022-02-01' = {
name: templateSpecName
location: location
}
resource createTemplateSpecVersion 'Microsoft.Resources/templateSpecs/versions@2022-02-01' = {
parent: createTemplateSpec
name: templateSpecVersionName
location: location
properties: {
mainTemplate: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
'contentVersion': '1.0.0.0'
'metadata': {}
'parameters': {
'storageAccountType': {
'type': 'string'
'defaultValue': 'Standard_LRS'
'metadata': {
'description': 'Storage account type.'
}
'allowedValues': [
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
]
}
'location': {
'type': 'string'
'defaultValue': '[resourceGroup().location]'
'metadata': {
'description': 'Location for all resources.'
}
}
}
'variables': {
'storageAccountName': '[format(\'{0}{1}\', \'storage\', uniqueString(resourceGroup().id))]'
}
'resources': [
{
'type': 'Microsoft.Storage/storageAccounts'
'apiVersion': '2023-04-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
Azure PowerShell または Azure CLI を使って、新しいリソース グループを作成します。
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
そのリソース グループ内にテンプレート スペックを作成します。 テンプレート スペック名 storageSpec とバージョン番号 1.0
は、Bicep ファイル内のパラメーターになっています。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
テンプレート スペックのデプロイ
テンプレート スペックを使ってストレージ アカウントをデプロイします。 この例では、storageRG
という名前のリソース グループを使います。 異なる名前を使ってもかまいませんが、コマンドを変更する必要があります。
新しいストレージ アカウントを格納するリソース グループを作成します。
New-AzResourceGroup `
-Name storageRG `
-Location westus2
テンプレート スペックのリソース ID を取得します。
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
テンプレート スペックをデプロイします。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
Bicep ファイルのデプロイとまったく同じようにパラメーターを指定します。 ストレージ アカウントの種類のパラメーターを指定して、テンプレート スペックを再デプロイします。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
新しいストレージ アカウントを格納するリソース グループを作成します。
az group create \
--name storageRG \
--location westus2
テンプレート スペックのリソース ID を取得します。
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
Note
Windows PowerShell におけるテンプレート スペック ID の取得と変数への代入には既知の問題があります。
テンプレート スペックをデプロイします。
az deployment group create \
--resource-group storageRG \
--template-spec $id
Bicep ファイルのデプロイとまったく同じようにパラメーターを指定します。 ストレージ アカウントの種類のパラメーターを指定して、テンプレート スペックを再デプロイします。
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType="Standard_GRS"
Bicep ファイルを使ってテンプレート スペックをデプロイするには、モジュールを使います。 モジュールは、既存のテンプレート スペックにリンクします。詳しくは、「テンプレート スペックのファイル」をご覧ください。
次の Bicep モジュールをコピーし、お使いのコンピューターに storage.bicep として保存します。
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
}
モジュール内の <subscriptionId>
を置き換えます。 サブスクリプション ID を取得するには、Azure PowerShell または Azure CLI を使います。
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Azure PowerShell または Azure CLI を使って、ストレージ アカウント用の新しいリソース グループを作成します。
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
Azure PowerShell または Azure CLI を使って、テンプレート スペックをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
パラメーターを追加し、別のストレージ アカウントの種類でテンプレート スペックを再デプロイできます。 サンプルをコピーして、storage.bicep ファイルを置き換えます。 それから、テンプレート スペックのデプロイを再デプロイします。
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
params: {
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
という名前の新しいバージョンを既存のテンプレート スペックに追加します。ユーザーはいずれかのバージョンを選択んでデプロイできます。
新しいバージョンのテンプレート スペックを作成します。
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
新しいバージョンをデプロイするには、2.0
バージョンのリソース ID を取得します。
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
新しいバージョンをデプロイし、storageNamePrefix
を使ってストレージ アカウント名のプレフィックスを指定します。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageNamePrefix "demo"
新しいバージョンのテンプレート スペックを作成します。
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
新しいバージョンをデプロイするには、2.0
バージョンのリソース ID を取得します。
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
新しいバージョンをデプロイし、storageNamePrefix
を使ってストレージ アカウント名のプレフィックスを指定します。
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageNamePrefix="demo"
テンプレート スペックの新しいバージョンを作成します。サンプルをコピーして、main.bicep ファイルを置き換えます。
パラメーター storageNamePrefix
では、ストレージ アカウント名のプレフィックス値を指定します。 変数 storageAccountName
は、プレフィックスと一意の文字列を連結します。
param templateSpecName string = 'storageSpec'
param templateSpecVersionName string = '2.0'
@description('Location for all resources.')
param location string = resourceGroup().location
resource createTemplateSpec 'Microsoft.Resources/templateSpecs@2022-02-01' = {
name: templateSpecName
location: location
}
resource createTemplateSpecVersion 'Microsoft.Resources/templateSpecs/versions@2022-02-01' = {
parent: createTemplateSpec
name: templateSpecVersionName
location: location
properties: {
mainTemplate: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
'contentVersion': '1.0.0.0'
'metadata': {}
'parameters': {
'storageAccountType': {
'type': 'string'
'defaultValue': 'Standard_LRS'
'metadata': {
'description': 'Storage account type.'
}
'allowedValues': [
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
]
}
'location': {
'type': 'string'
'defaultValue': '[resourceGroup().location]'
'metadata': {
'description': 'Location for all resources.'
}
}
'storageNamePrefix': {
'type': 'string'
'defaultValue': 'storage'
'metadata': {
'description': 'The storage account name prefix.'
}
'maxLength': 11
}
}
'variables': {
'storageAccountName': '[format(\'{0}{1}\', toLower(parameters(\'storageNamePrefix\')), uniqueString(resourceGroup().id))]'
}
'resources': [
{
'type': 'Microsoft.Storage/storageAccounts'
'apiVersion': '2023-04-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
テンプレート スペックに新しいバージョンを追加するには、Azure PowerShell または Azure CLI を使ってテンプレートをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
次の Bicep モジュールをコピーし、お使いのコンピューターに storage.bicep として保存します。
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:2.0' = {
name: 'deployVersion2'
params: {
storageNamePrefix: 'demo'
}
}
モジュール内の <subscriptionId>
を置き換えます。 サブスクリプション ID を取得するには、Azure PowerShell または Azure CLI を使います。
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Azure PowerShell または Azure CLI を使って、テンプレート スペックをデプロイします。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
リソースをクリーンアップする
このクイックスタートでデプロイしたリソースをクリーンアップするには、両方のリソース グループを削除します。 リソース グループ、テンプレート スペック、ストレージ アカウントが削除されます。
Azure PowerShell または Azure CLI を使って、リソース グループを削除します。
Remove-AzResourceGroup -Name "templateSpecRG"
Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG
az group delete --name storageRG
次のステップ