この記事は セゾンテクノロジー Advent Calendar 2024 1日目の記事です。
Microsoft Ignite 2024でAzure Logic Apps StandardのデプロイメントスロットがGAしました。
App Serviceのデプロイメントスロットと同じかなと予想しつつも、どういう使い勝手なのか検証してみたので書き残します。
デプロイメントスロット?
- 複数の環境を作成してアプリケーションをデプロイできる機能です
- 例えばアプリをバージョンアップする際に、Stagingスロットを作成して、まずはそこにデプロイする。テスト完了後にProductionとStagingスロットを入れ替え(スワップ)することで無停止でのアプリケーションデプロイを可能にします
- 切り戻しも再度スワップすることで即座に行うことが可能です
デプロイメントスロットが利用できるプラン
- Logic Appsのプランは大きく2種類あります
- 従量課金プラン(マルチテナント)
- Standardプラン(シングルテナント)
- デプロイメントスロットが利用できるのは Standardプラン のみとなります
Logic Appsワークフロー準備
-
今回テストのため以下のシンプルなワークフローをAzure Portalから作成しました
-
ステージングデプロイメントスロットではメールの文言を変えて、スワップしたときに正しくデプロイされたかを確認してみたいと思います
デプロイメントスロット作成
-
スロット名を入力します。今回はstgと入力します
-
スロットを選択すると新しいLogic Appsが作成されていることが確認できます
stgスロットでワークフロー作成
-
調べてみるとPortalからは読み取り専用となっているようです。なので、スロットにワークフローを作成するには、VS CodeからデプロイもしくはAzure CLIで資産をzipアップロードする必要があるということが分かりました
-
今回はAzure CLIでのzipアップロード方式を試してみることにします
アプリコンテンツダウンロード
-
デプロイメントスロットは削除しておきます
-
zipファイルでローカルにダウンロードされるので展開します。展開するとワークフロー名のフォルダの配下にworkflow.jsonファイルがあるので開きます
-
開いたらメールの本文をv2に変更します
"body": {
"To": "[Your mail address]",
"Subject": "logic apps test",
"Body": "<p class=\"editor-paragraph\">v2</p>",
"Importance": "Normal"
},
- Azure CLIで以下コマンドを実行してステージングスロットにデプロイします
az logicapp deployment source config-zip --name [Logic Apps Name] --resource-group [Resource Group Name] --slot [slot Name] --src [Logic Apps Name].zip
-
ではこの状態でBlobトリガーはプロダクションとステージング両方反応するのか?という疑問が生まれたので試してみました。結論、プロダクション側は動きましたが、ステージング側は動きませんでした
-
どうやらデプロイメントスロット側はトリガーに反応しないようです
スワップ
-
それではプロダクションとステージングを切り替えてみます
-
スワップが完了し、再度Blobトリガーで挙動を試してみると、変更したv2の本文でメールがきたことを確認できました
-
スワップ後もステージングスロットのBlobトリガーは反応しません
まとめ
- 今回検証しているといくつかの疑問点が出てきたのでまとめておきます
スワップ後にPortalから見ても設定が反映されていない?
どういう利用方法がいいのか?
- Portalから編集できずテストもできないということで、利用方法を検討しました。以下のような流れがいいのではと考えています
- VS CodeでLogic Appsワークフローを作成する(VS Codeでも拡張機能を使えばグラフィカルなワークフローを作成可能)
- Productionにデプロイする
- バージョンアップしたい場合は、VS Codeで編集する
- デプロイメントスロットにデプロイしてもテストはできないため、VS Codeからローカルでテストする
- デプロイメントスロットを作成してデプロイする
- スワップする
- 問題なければデプロイメントスロットを削除する
実際使えそう?
- 一番のメリットは無停止でのデプロイだろうなと思います。デプロイ時の停止を極力避けたいのであればこの方法がよいと思います
- 一方で検証したところ上述の通りまだ不安定な挙動があるなと思いました
- Portalでワークフローを作るのではなく、VS Codeで完結するような運用をしていかないとデプロイメントスロットは活用できないかなという印象です
以上です