船井総研デジタルのよもぎたです。
Azure Logic Appsは多彩なInput/OutputやフローをAzure PortalのWebUIから実現できるとても強力なサービスです。その反動といいましょうか、IaC化するとき、Terraformではとても苦戦してしまいました。しかし、Bicepに切り替えたらとてもラクでした。そのアレコレを共有いたします。
ロジックアプリのIaC化のどこに苦戦したか
Azure Portalからロジックアプリを作成したときと同様の、空(から)の、何の処理も定義されていないロジックアプリをTerraformで作成するのは難しくありませんでした。でも、ロジックアプリの処理まで含めて、IaC化したいですよね。そこに踏み込もうとすると、冒頭に書いたロジックアプリの多機能さ故、リソースの定義がとても難しくなってしまうと感じました。
なぜBicepがよいのか
ARMテンプレートのJSONファイルをAzure Portalからエクスポート出来るのはご存知かと思います。それをBicepにデコンパイルでき、それをもとに、同様の処理を実行するロジックアプリをパラメータを変えつつデプロイできるからです。
ARMテンプレートをBicepにデコンパイルする方法は、同僚の @fsdg-takada のポータルで作成したAzure Logic Appsをインフラのコード化(IaC)で再現(ARMテンプレートからBicepに変換する裏技付き) で知りました。感謝。
実際にどうやるか
全体像
- Azure Portalからロジックアプリを作成する。
- 作成したロジックアプリのARMテンプレートをエクスポートする。
- ARMテンプレートをBicepにデコンパイルする。
- Bicepをデプロイ先によって変えたい部分と変わらない部分に分割する。
- ロジックアプリを修正しながらデプロイ先によって変えたい部分の具体的な値を取得する。
- 必要なパラメータを集めて、デプロイ先ごとのファイルを作成する。
- いざ、デプロイする。
大まかなイメージは掴んで頂けるのではないかと思います。
環境構築
必要に応じて実施してください。Azure CLIでBicepを扱えるようにします。
$ az bicep install
$ az bicep upgrade
ARMテンプレートのエクスポートとBicepへのデコンパイル
簡単に書いてしまうと次の1行ですが、詳しくは上記の @fsdg-takada の記事をご覧ください。
$ az bicep decompile --file armtemplate.json
Bicepファイルの分割
ここでは、仮に開発環境(dev)と本番環境(prod)の2つの環境にパラメータを変えてデプロイしたいとします。ファイル名は次の通りとします。
- 共通部分を記述したファイル:
logicapp_common.bicep
- dev環境固有のパラメーターを記述したファイル:
logicapp_dev_env.bicep
- prod環境固有のパラメーターを記述したファイル:
logicapp_prod_env.bicep
まず、 logicapp_common.bicep
から変数として切り出したい部分の記述を修正します。ここでは、例としてロジックアプリの名前を変更します。ロジックアプリの名前は、 logicapp_common.bicep
では次のように定義されています。
param workflows_logicapp_..._name string = '<logicapp-name>'
---<snip>---
resource workflows... {
---<snip>---
name: workflows_logicapp_..._name
---<snip>---
}
ここで、それぞれの環境にファイルを用意してやります。workflows_logicapp_..._name
は長いので、 logicappName
に変更します。
dev環境のファイル logicapp_dev_env.bicep
は下記のようになります。
module devModule 'logicapp_common.bicep' = { # 後続で読み込みたいファイル名を指定する
name: 'logicapp_deploy_for_dev_env'
params: {
logicappName : 'logicapp-bicep-dev'
}
}
共通ファイルの logicapp_common.bicep
は次のように変更します。
param logicappName string # 変数の型だけ宣言して、値は代入しない。これを記述しないと、モジュールファイルから変数を継承できない。
---<snip>---
resource workflows... {
---<snip>---
name: logicappName # 変更後の変数名にする
---<snip>---
}
logicapp_prod_env.bicep
も同様で、下記のようになります。
module devModule 'logicapp_common.bicep' = {
name: 'logicapp_deploy_for_prod_env'
params: {
logicappName : 'logicapp-bicep-prod'
}
}
環境ごとにデプロイする
Bicepファイルが作成出来たら、デプロイしましょう。環境ごとのBicepファイルをデプロイすることで、あわせて共通部分のBicepファイルも読み込まれてデプロイされます。
dev環境のデプロイ
$ az deployment group create --resource-group rg-<resource group name> --template-file logicapp_dev_env.bicep
prod環境のデプロイ
az deployment group create --resource-group rg-<resource group name> --template-file logicapp_prod_env.bicep
まとめ
簡単な例しかご紹介していませんが、パラメータを変えつつ同じ処理をするロジックアプリを複数デプロイする方法は掴んで頂けたと思います。
これからもAzure推しでいきたいと思います。
最後までお読みいただきありがとうございました。