10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セゾンテクノロジーAdvent Calendar 2024

Day 1

Azure Logic Apps Standardのデプロイメントスロットを試してみる

Last updated at Posted at 2024-11-30

この記事は セゾンテクノロジー Advent Calendar 2024 1日目の記事です。

Microsoft Ignite 2024でAzure Logic Apps StandardのデプロイメントスロットがGAしました。
App Serviceのデプロイメントスロットと同じかなと予想しつつも、どういう使い勝手なのか検証してみたので書き残します。

デプロイメントスロット?

  • 複数の環境を作成してアプリケーションをデプロイできる機能です
  • 例えばアプリをバージョンアップする際に、Stagingスロットを作成して、まずはそこにデプロイする。テスト完了後にProductionとStagingスロットを入れ替え(スワップ)することで無停止でのアプリケーションデプロイを可能にします
  • 切り戻しも再度スワップすることで即座に行うことが可能です

image.png

デプロイメントスロットが利用できるプラン

  • Logic Appsのプランは大きく2種類あります
    • 従量課金プラン(マルチテナント)
    • Standardプラン(シングルテナント)
  • デプロイメントスロットが利用できるのは Standardプラン のみとなります

Logic Appsワークフロー準備

  • 今回テストのため以下のシンプルなワークフローをAzure Portalから作成しました

    • 特定のBLOBストレージにオブジェクトが配置されたらメールを送信するというものです
      image.png
    • メール本文にはv1とだけ書いてます
      image.png
  • ステージングデプロイメントスロットではメールの文言を変えて、スワップしたときに正しくデプロイされたかを確認してみたいと思います

デプロイメントスロット作成

  • Portalの左メニューより[デプロイスロット]を選択します
    image.png

  • [追加]を選択します
    image.png

  • スロット名を入力します。今回はstgと入力します

    • このときLogic Appsのエンドポイントは [Logic Apps Name]-stg.azurewebsites.net という形で作成されます
      image.png
  • スロットを選択すると新しいLogic Appsが作成されていることが確認できます

  • stgスロットのLogic Appsでワークフローを選択します
    image.png

  • ワークフローは空で作成されるようです
    image.png

stgスロットでワークフロー作成

  • Portalからワークフローを作ろうとしたところグレーアウトされて作成ができませんでした
    image.png

  • 調べてみるとPortalからは読み取り専用となっているようです。なので、スロットにワークフローを作成するには、VS CodeからデプロイもしくはAzure CLIで資産をzipアップロードする必要があるということが分かりました

  • 今回はAzure CLIでのzipアップロード方式を試してみることにします

アプリコンテンツダウンロード

  • デプロイメントスロットは削除しておきます

  • ProductionのLogic Appsに戻って、左メニューの概要から[アプリコンテンツのダウンロード]を選択します
    image.png

  • [ダウンロード]を選択します
    image.png

  • 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
  • ステージングスロット側にワークフローが作成されていることが確認できます
    image.png

  • メール本文もv2に変更されてますね
    image.png

  • ここで気付いたのが、ステージングスロットでは手動での実行ができないようです
    image.png

  • ではこの状態でBlobトリガーはプロダクションとステージング両方反応するのか?という疑問が生まれたので試してみました。結論、プロダクション側は動きましたが、ステージング側は動きませんでした

  • どうやらデプロイメントスロット側はトリガーに反応しないようです

スワップ

  • それではプロダクションとステージングを切り替えてみます

  • デプロイスロットの画面から[Swap]を選択します
    image.png

  • ソースとターゲットを選択して、Swap Startボタンを押下します
    image.png

  • 1~2分かかります
    image.png

  • スワップが完了し、再度Blobトリガーで挙動を試してみると、変更したv2の本文でメールがきたことを確認できました

  • スワップ後もステージングスロットのBlobトリガーは反応しません

まとめ

  • 今回検証しているといくつかの疑問点が出てきたのでまとめておきます

スワップ後にPortalから見ても設定が反映されていない?

  • スワップ後にPortalから設定を確認しても、なぜか反映がされていません。以下はPortalから見たコード。v1のままになっているが、メールはv2で届いている
    image.png

  • scmから実際にデプロイされているコードをみるとv2になっている。謎です
    image.png

どういう利用方法がいいのか?

  • Portalから編集できずテストもできないということで、利用方法を検討しました。以下のような流れがいいのではと考えています
    • VS CodeでLogic Appsワークフローを作成する(VS Codeでも拡張機能を使えばグラフィカルなワークフローを作成可能)
    • Productionにデプロイする
    • バージョンアップしたい場合は、VS Codeで編集する
    • デプロイメントスロットにデプロイしてもテストはできないため、VS Codeからローカルでテストする
    • デプロイメントスロットを作成してデプロイする
    • スワップする
    • 問題なければデプロイメントスロットを削除する

実際使えそう?

  • 一番のメリットは無停止でのデプロイだろうなと思います。デプロイ時の停止を極力避けたいのであればこの方法がよいと思います
  • 一方で検証したところ上述の通りまだ不安定な挙動があるなと思いました
  • Portalでワークフローを作るのではなく、VS Codeで完結するような運用をしていかないとデプロイメントスロットは活用できないかなという印象です

以上です

10
0
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
10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?