APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

入門Azure Bicep 1

Bicepとは

APC 亀崎です。はじめてのAPC 技術ブログの投稿になります。はじめてなのにいきなりシリーズものを作ってしまう暴挙をお許しください。

みなさんAzureのリソースをデプロイする際何を利用していますか? Azure Portal?Az CLIやPowerShell?ARM Template? Azure Portalが一番簡単ですが、繰り返し作業には向きません。Az CLIなどを使うとスクリプト等で繰り返し作業はできるようになりますが、リソース間の依存関係などを記述していくのは手間がかかります。繰り返し作業にはARM Templateが向いています。しかし、非常に見にくい。1つのリソースをデプロイするだけならまだ良いのですが、2つ・3つと関連付けていくと読み解くのが大変。そうしたARM Templateの辛さを解消してくれるのがAzure Bicepです。

github.com

Azure Bicep(以降Bicepと略します)はARM TemplateのDSLとして作られており、定義ファイルの記述型式というよりもプログラムコードのような記述型式で読みやすさ・書きやすさを実現しています。コマンドラインで実行するとARM TemplateのJSONファイル形式にトランスパイルしてデプロイされます。

インストール

まずはじめにBicepをインストールしましょう(公式ページのインストール手順はこちら)。 2021年3月24日、Azure BicepはAz CLI(2.20以降)に含まれるようになりました。az bicep version と実行してエラーになるようであれば az upgrade を実行して最新にすると利用できるようになると思います。またAzure PowerShelでもv5.6.0以降で対応しています。

Bicepファイルの編集用にVS CodeのExtensionが用意されています。こちらをインストールしておくと自動補完等が有効になり作業が非常にはかどります。

デプロイ

ファイル作成

準備はできましたでしょうか。では早速Azureのリソースの定義を書いてみたいと思います。今回の例では Azure Database for PostgreSQL シングルサーバーをデプロイしてみたいと思います。早速コード(postgresql.bicepファイル)を。

@description('Name for postgreSQL')
param name string
@description('resource location')
param location string = resourceGroup().location
@description('Administrator user name')
@secure()
param adminUser string
@description('Administrator user password')
@secure()
param adminPassword string
@description('SKU tier')
@allowed([
  'Basic'
  'GeneralPurpose'
  'MemoryOptimized'
])
param skuTier string = 'Basic'
@description('The family of hardware')
param skuFamily string = 'Gen5'
@description('The scale up/out capacity')
param skuCapacity int = skuTier == 'Basic' ? 2 : 4

var skuNamePrefix = skuTier == 'GeneralPurpose' ? 'GP' : (skuTier == 'Basic' ? 'B' : 'OM')
var skuName = '${skuNamePrefix}_${skuFamily}_${skuCapacity}'

resource pgsql 'Microsoft.DBForPostgreSQL/servers@2017-12-01' = {
  name: name
  location: location
  sku: {
    name: skuName
    tier: skuTier
    family: skuFamily
    capacity: skuCapacity
  }
  properties: {
    createMode: 'Default'
    administratorLogin: adminUser
    administratorLoginPassword: adminPassword
  }
}

param で始まる部分はコマンドライン等から指定できるパラメータ変数です。その変数の上に記載されている@descriptionや@allowed等はアノテーションと呼ばれるものでパラメータの説明や値の範囲などを定義しています。
param の変数で = を指定している場合はその値がデフォルト値になり、コマンドライン等からの指定は不要です。デフォルト値がない場合は必ずコマンドライン等から指定しなければなりません。上の例では(name、adminUser、adminPassword)がデフォルト指定がありませんので必ず指定が必要になります。
var で始まる部分はコマンドライン等からは変更できないファイル内で利用する内部変数です。
resource で始まる部分が実際のリソース定義の部分。記載する項目はARM Templateの定義と同じですが書き方がちょっと違います。ARM Template はJSON型式なのですべてのキー名称を""で囲う必要がありましたが、Bicepではそれは不要です。またparamやvarの変数もそのまま記載可能。もしparamやvarを組み合わせた内容にしたい場合は 'Sample_${skuTier}' といったように''で囲い直接文字列を記載し、変数は${}で指定することができます。

デプロイ実行

では早速デプロイしてみましょう。今回は最初にAzコマンドでリソースグループを作成し、その後上記のファイルをデプロイします。

az group create --name rg-sample --location japaneast

az deployment group create -f ./postgresql.bicep -g rg-sample \
  --parameters name=bicep-sample-db adminUser=pgsqladmin adminPassword=p@ssw0rd

(adminUser名やadminPasswordはサンプルとしてあえて掲載したものです。このまま利用するのはお控えください) az deploymentが完了するとPostgreSQLがデプロイされていると思います。

Azure Portalのリソースグループを選択してみましょう。PostgreSQLがデプロイされているのが確認できます。

f:id:turtle2005:20210405205748j:plain
Resource Group
続いてリソースグループ画面のサイドメニューから「デプロイ」を選んでください。こちらにはaz deployment groupコマンドでデプロイした一覧が表示されます。
f:id:turtle2005:20210405202031j:plain
deploy一覧

上記のデプロイを選択してください。内容が確認できます。サイドメニューの「テンプレート」を選択するとデプロイの際のARM Templateが表示されます。Bicepで記述した内容がARM TemplateのJSON形式にトランスパイルされてデプロイされていることがわかります。

f:id:turtle2005:20210405202051j:plain
デプロイテンプレート内容

終わりに

いかがでしたでしょうか。JSON形式に比べると見やすい内容になっていると思います。 今回はまずデプロイする部分までをご紹介しました。次回は今回ご紹介したファイルのアノテーションなどについて説明をしていきたいと思います。そしてそれ以降はBicepのさらに強力な部分をご紹介していきたいと思います。

それでは次回をお楽しみに。