Table of Contents
Bicepとは
BicepとはAzureリソースを宣言的に記述・デプロイするためのDSLです。 以下のリポジトリにて、開発・公開がされています。
以下はBicepで記述されたテンプレートの一例です。
param appName string
param environment string
var storageAccountName = toLower('${appName}Storage${environment}')
resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: storageAccountName
sku: {
name: 'Standard_LRS'
tier: 'Standard'
}
kind: 'StorageV2'
location: resourceGroup().location
identity: {
type: 'SystemAssigned'
}
}
resource storageAccountName_default_image 'Microsoft.Storage/storageAccounts/blobServices/containers@2019-06-01' = {
name: '${storageAccount.name}/default/image'
properties: {
publicAccess: 'None'
}
}
output storageAccountID string = storageAccount.name
Terraformの問題点
弊社ではこれまでAWSを多く使ってきており、一部のプロジェクトではTerraformを使った実績もあります。このため、Azureにおいても最初はTerraformを使ってIaCしてきたのですが、我々のプロジェクトで使用する一部のリソースや機能はTerraformでは未対応でした。新機能がすぐに対応するとは限らない点はTerraformのデメリットです。
ARMの問題点
AWSでいうところのCloudFormationのような、IaCを実現するサービスとして、ARM(Azure Resource Manager)というサービスがあります。こちらは、Azure自身が提供しているので新機能も比較的対応しているようです。一方、こちらはJSONで記述する必要があり冗長な記述となりがちですし、モジュール分割をするためにはテンプレート スペックと呼ばれる機能を使う必要があり、デプロイに一手間を要します。
Bicepの良さ
Bicepは Terraformの簡潔な文法を維持しつつ、ARM同等に使えるという 両者の良いとこ取りをした言語という印象です。
Bicepを学ぶには
Azure Learnがわかりやすいです。言語仕様がシンプルなので、このチュートリアルを実施すれば一通り網羅できるはずです。
BicepでWebサーバのよくある構成を書いてみた
ここでは、Webシステムで良く見かける構成として、Application Gateway + Virtual Machine + Database for PostgreSQL + Storage AccountのIaCをBicepで書いてみました。
Tech Blogに貼り付けるにはソースコードが長いので、以下リポジトリを参照ください。
以下のように1コマンドでデプロイできます。
$ az deployment group create --template-file main.bicep
BicepでARMテンプレートをDecompileしてみた
BicepはARMテンプレートのDecompileに対応しています。「Bicep良さそうだけど作成済みのARMテンプレートがたくさんある...」という人も簡単にBicepを導入できます。
以下のようにコマンドを実行するだけで、関連するテンプレートが全てBicepファイルとして出力されます。
$ az bicep decompile --file arm/main.json
ちなみに、以下のコマンドでBicep→ARMテンプレートの変換も可能です。
$ az bicep build --file bicep/main.bicep
まとめ
最初に述べた通り、Azureリソースの記述・デプロイに関してはBicepがベストな選択肢になり得ると感じました。みなさんもぜひお試しください。
Related Posts
yukabeoka
2021/09/07
Yuhei Okazaki
2021/04/26