3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Logic AppsのIaC化にはBicepがおススメです

Posted at

船井総研デジタルのよもぎたです。

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に変換する裏技付き) で知りました。感謝。

実際にどうやるか

全体像

  1. Azure Portalからロジックアプリを作成する。
  2. 作成したロジックアプリのARMテンプレートをエクスポートする。
  3. ARMテンプレートをBicepにデコンパイルする。
  4. Bicepをデプロイ先によって変えたい部分と変わらない部分に分割する。
  5. ロジックアプリを修正しながらデプロイ先によって変えたい部分の具体的な値を取得する。
  6. 必要なパラメータを集めて、デプロイ先ごとのファイルを作成する。
  7. いざ、デプロイする。

大まかなイメージは掴んで頂けるのではないかと思います。

環境構築

必要に応じて実施してください。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推しでいきたいと思います。

最後までお読みいただきありがとうございました。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?