はじめに
本記事は、Azure 開発を Bicep で始めようとしている初学者の方向けの解説記事です。
入門編では、Azureのリソース設定値をハードコーディングしたサンプルコードをご紹介していました。
しかし、実務では同じコードを使って開発環境と本番環境を両方デプロイする必要があります。
環境毎に異なるパラメーターを使う場合に、パラメーターファイル (.bicepparam) を使用します。
これによって、一つのインフラコードで複数の環境を管理する仕組みができます。
1. bicepparam とは
各環境毎のパラメーターを定義するファイルです。
※JSON を使う場合は、.parameters.json を使用しますが、ここでは Bicep 形式で説明するため、.bicepparam メインに解説します。
-
メリット
- 一貫性: 大元になる Bicep ファイルが同じため、パラメーターだけ変更するだけで全く同じ構成の別環境がデプロイできます。
- 柔軟性: リソースのサイズ変更等が発生した際に、メインのBicepを変更することなく、パラメーターファイルの変更のみで対応可能です。
- 保守・運用性: 環境毎のパラメーターが別ファイルで一覧化されるため、可読性が高まります。
- セキュリティ: 本番環境デプロイ時に開発環境の値を誤ってデプロイする事故が防げます。
2. 環境別デプロイの構成例
以下の構成は、main.bicep をテンプレートとして共有し、パラメーターは /parameters 配下の .bicepparam で管理する仕組みです。
├── main.bicep # 構成を定義する本体(テンプレート)
└── parameters/
├── dev.bicepparam # 開発環境用の値
└── prod.bicepparam # 本番環境用の値
3. サンプルコード
以下は、ストレージアカウントを作成するコードです。
各環境毎にストレージアカウントの SKU を切り替えてデプロイできるようにしています。
targetScope = 'resourceGroup'
@description('デプロイ先の環境名(dev, prod など)')
param environmentType string = 'dev'
@description('リソースを配置するリージョン')
param location string = resourceGroup().location
@description('ストレージアカウントのSKU')
@allowed([
'Standard_LRS'
'Standard_ZRS'
])
param storageSku string
// ストレージアカウントの作成
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
// 環境名を含めて一意な名前を生成
name: 'stbicep${environmentType}${uniqueString(resourceGroup().id)}'
location: location
sku: {
name: storageSku
}
kind: 'StorageV2'
}
using '../main.bicep'
// 開発環境用の値を注入
param environmentType = 'dev'
param storageSku = 'Standard_LRS'
using '../main.bicep'
// 本番環境用の値を注入
param environmentType = 'prod'
param storageSku = 'Standard_ZRS'
paramについて
入門編で紹介した param ですが、サンプルコードの通り、.bicepparam から environmentType を受け取る仕組みとなっており、外部ファイル .bicepparam から main.bicep にパラメーターを上書きしています。
デフォルト値は dev ですが、prod.bicepparam を読み込んだ場合は、prod で設定されます。
また、型指定 (string 等) は、main.bicep 側で行っているため、 .bicepparam 側では指定不要です。
3-1. using
パラメーターファイルで、どのBicepファイルで使用するかを定義するステートメントです。
.bicepparam を使用する場合、ファイルの先頭に記述することが必須になります。
-
基本構文 :
using '<参照するファイルまたはリポジトリ名>'-
Bicepファイルの場合 : Bicepファイルの絶対パスか相対パスを記載
<ファイルパス>/<ファイル名>.bicep -
パブリックモジュール (AVM) の場合 :
'br/public:<ファイルパス>:<タグ名>' -
プライベートモジュールの場合 :
br:<ACRの名前>.azurecr.io/bicep/<ファイルパス>:<タグ名> -
テンプレートスペックの場合 :
ts:<サブスクリプションID>/<リソースグループ名>/<テンプレートスペック名>:<タグ名> -
全体で使用する場合 :
none※参照先無しにすることでグローバルに使用できます
-
Bicepファイルの場合 : Bicepファイルの絶対パスか相対パスを記載
4. デプロイ
デプロイコマンド実行時に、使用するパラメーターファイルを指定することで、各環境毎の設定でデプロイできます。
- リソースグループ
- 開発環境用: rg-bicep-dev
- 本番環境用: rg-bicep-prod
- デプロイコマンド
- 開発環境の場合
az deployment group create --resource-group rg-bicep-dev --parameters parameters/dev.bicepparam - 本番環境の場合
az deployment group create --resource-group rg-bicep-prod --parameters parameters/prod.bicepparam
- 開発環境の場合
--template-fileオプションについて
各 .bicepparam に 先頭に using '../main.bicep' が定義されているため、コマンド実行時に --template-file main.bicep を指定しなくても、自動的に main.bicep が実行されます。
おわりに
今回はパラメーターファイル (.bicepparam) を使った環境毎のデプロイ方法をご紹介しました。
メインとなるコードを修正することなく、パラメーターだけ管理できる仕組みができるため、環境毎の状態の管理がしやすくなります。
また、開発環境と本番環境が明確に分けられるため、オペレーションミスを防ぐこともできます。
複数の環境を構築するプロジェクトでは、必須のファイルになりますので、ぜひ活用してみてください。