Standard タイプの Logic Apps について少し触れてみる

本記事は、[Microsoft Azure Tech Advent Calendar 2023 25 日目](https://qiita.com/advent-calendar/2023/microsoft-azure-tech) の投稿です。

## はじめに
一般的な iPaaS 製品として Workato や Power Automate 等がありますが、Azure でも Logic Apps というサービスが提供されています。
[Azure Logic Apps とは](https://learn.microsoft.com/ja-jp/azure/logic-apps/logic-apps-overview)

こちらの製品では従量課金（マルチテナント）タイプと Standard （シングルテナント）タイプが用意されていますが、Standard タイプのリソースについてはここ数年で出てきたサービスなので、意外と知られていない点が多いのかなと思います。
例えば、以下の問題の診断と解決の記事についても、実は Standard タイプの Logic Apps では同じようにネットワーク疎通のトラブルシューティングが出来たりします。
（App Service や Functions と同じプラットフォームを利用しているためです。ただし、全ての機能が利用できるわけではございません。）
[意外と開いたことがなかった（かもしれない）App Service/Functions の `問題の診断と解決`](https://qiita.com/zak74702675/items/c522883d96e79d18746a)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/7e090877-cd8f-98fb-26f2-6ad1985fed75.png)

本記事では、Standard Logic Apps についてもう少し知ってもらうために簡単に概要の説明をさせていただきます。
なお、この記事については 2023年12月現在の内容となります。今後、予告なく情報が更新される場合がございますので予めご了承下さい。

## Standard Logic Apps の概要
まず、従量課金タイプと Standard タイプの比較については以下の公開情報がございます。
[Azure Logic Apps でのシングルテナント、マルチテナント、統合サービス環境の比較](https://learn.microsoft.com/ja-jp/azure/logic-apps/single-tenant-overview-compare)

`Standard ロジック アプリとワークフローには、再設計されたシングルテナント Azure Logic Apps ランタイムが使用されています。 このランタイムには Azure Functions 機能拡張モデルが使用されており、Azure Functions ランタイムの拡張機能としてホストされます。 この設計により、ロジック アプリ ワークフローの移植性、柔軟性、パフォーマンス向上に加え、Azure Functions プラットフォームと Azure App Service エコシステムから継承されたその他の機能と利点が提供されます`

先に記載した通り、Standard タイプでは基盤部分に App Service および Functions を利用しているため、それらの機能を利用したワークフローを構築することが可能となります。つまり、VNet 統合で VNet 上のリソースに対してアクションを実行したり、プラットフォーム部分について自分でリソースのサイジングが出来るので、パフォーマンスチューニングをしやすいなどのメリットがあります。
従量課金タイプのリソースについては他テナントのお客様の共用でリソースを利用しているため自分でリソースのサイジングが出来ないことや、VNet 統合といった Azure リソースを利用してアクションを実行することが出来ない仕様となっております。

しかしながら、Standard タイプ、つまりシングルテナントだからといって自分のリソース上にワークフローを無限に作成するような利用用途を期待しているかというとそうではございません。以下のように、数が多すぎると描画などパフォーマンスの低下が発生する恐れがあるので、一つの Standard Logic Apps に対して 10 - 15 個のワークフローが推奨値とされています。
[Azure portal でサンプル Standard ロジック アプリ ワークフローを作成する](https://learn.microsoft.com/ja-jp/azure/logic-apps/create-single-tenant-workflows-azure-portal?tabs=standard#best-practices-and-recommendations)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/ff98cd31-0368-3972-c122-cb66ee72be05.png)


実際、Standard タイプのリソースであってもコネクタの利用に課金が発生しますし、従量課金タイプとは異なり App Service Plan のリソースを保有している時間単位で課金※も発生するので、価格面でもかなり異なってきます。
[Logic Apps の価格](https://azure.microsoft.com/ja-jp/pricing/details/logic-apps/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/7d9fcf85-9c95-473d-858f-4d6973b28b99.png)
（※実行ログなどのデータ保持にかかる料金にも注意。）

かつ、公開情報に記載はありませんが、一つの Standard Logic Apps に対して、紐づけるストレージアカウントについては一つを推奨しております。
複数の Standard Logic Apps が一つのストレージアカウントを使いまわしている場合に、正しく処理が行われなかったり、ストレージアカウントに対して一時的に負荷が発生したり、ワークフロー全体として想定外のエラーが発生する場合がございます。

ですので、Standard Logic Apps の概要としては、プラットフォームとして利用している App Service の機能を利用したうえでお客様のビジネス要件に併せたワークフローを構築することを想定したプランであるとご理解いただければと思います。
参考までに、Standard Logic Apps で利用する App Service Plan の WS1～WS3 については、App Service の Premium V2（V3 ではない）がベースとなっております。

## Standard Logic Apps の API 接続・サービスプロバイダ接続
Logic Apps を利用する際に、API 接続というリソースが必要となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/f9b03d0a-7f12-ef03-5498-7f0423f2397a.png)

これは、ワークフローを構築する際にアクションやトリガーで各サービスに接続する際のトークン情報を保持するためのリソースになります。例えば、初めて Blob コネクタを利用する際に認証情報を入力する画面が表示されるかと思いますが、それらの情報が保持されるリソースとなります。

参考までに、従量課金タイプと Standard タイプを併用されている方は以下のように V1 と V2 が表示されていると思いますが、V1 の API 接続は従量課金タイプ、V2 は Standard タイプの API 接続となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/ead5b3ba-42f3-64cc-2846-c59ed453ee75.png)

このリソース自体には特に課金はかかりませんが、削除してしまうとアクションやトリガーがエラーになる場合があることや、リソースの復元が出来ないので、リソースの削除の際にはワークフローとの紐づきを十分に確認したうえで削除してください。

また、Standard Logic Apps で利用している API 接続については、[ワークフロー] - [接続] の [API 接続]タブで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/e9f15f92-0c38-0ade-01f8-0b43b60495e7.png)

ここで注意が必要になるのが、組み込みコネクタを利用した際の接続情報は、サービスプロバイダー接続として情報が作成される点に注意してください。
[Azure Logic Apps の組み込みコネクタ](https://learn.microsoft.com/ja-jp/azure/connectors/built-in)

具体例として、以下のようにマネージドコネクタの BLOB コネクタと、組み込みコネクタ（アプリ内と記載されている英語のアクション名）の BLOB コネクタが存在します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/e78eccd9-9273-2987-4847-c13533cdf7d4.png)

マネージドコネクタの場合は認証情報が API 接続として作成されますが、組み込みコネクタ（アプリ内と記載されている英語のアクション名）は API 接続のリソースは作成されず、代わりにサービスプロバイダー接続として接続情報が作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/8bb134ae-aee5-8f4c-bd79-ca21db7561ef.png)

この情報が記載されているファイルについては、以下のように概要から [アプリコンテンツのダウンロード]を選択し、ダウンロードした Zip ファイル内の connections.json のファイルを基に確認することが可能です。
[シングルテナントの Azure Logic Apps で Standard ロジック アプリのホストとアプリの設定を編集する](https://learn.microsoft.com/ja-jp/azure/logic-apps/edit-app-settings-host-settings?tabs=azure-portal)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/158547e6-da4a-9d56-218f-3aa8e10f74e1.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/d8d3e9b7-994f-b585-e757-0787c582cbd6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/17cd8648-611b-701f-8ead-7c8e1dd8b63c.png)

サービスプロバイダー接続の情報を削除したい場合は、connections.json の設定値を直接削除するか、JSON ビューで直接値を削除して保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/4b3a2a7a-f713-f5e1-cbba-a7007ba7eeb7.png)

## Standard Logic Apps を作成した際の関連リソース
API 接続以外にも、Standard Logic Apps を作成するといくつか関連リソースが作成されます。
・Azure Portal の入力情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/d22ad319-7e60-c316-c30c-1158bb28cd3b.png)

・実際作成されるリソース
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/9866686e-9838-28e8-5993-6d62faf19275.png)
Application Insightsに関しては任意ですが、App Service Plan と ストレージアカウントについては作成が必須のリソースとなります。（これらについては既存のリソースを流用することも可能。）
App Service Plan の利用用途としては Standard Logic Apps のワークフローが動作するプラットフォームとしての用途ですが、ストレージアカウントについてはワークフローの定義情報やログ、ワークフローのキューなどを格納する用途となります。

Standard Logic Apps がどのリソースを参照しているかについては [設定] - [環境変数] のアプリ設定の各値を表示いただくことで確認可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/4230ef45-ab4c-f912-f692-32112c62bbf1.png)

この時、この環境変数の値がおかしかったり、ストレージアカウントでファイアウォール設定を有効化していることで Standard Logic Apps がストレージアカウントに接続できない状態だと、ワークフローが表示できない等のエラーが発生します。
作成されたストレージアカウントを確認するとコンテナやファイル共有など、それぞれにリソースが作成されますが、例えばファイル共有の中には実際に作成したワークフローの定義情報が格納されているので絶対に削除しないように注意が必要です。（ファイル共有以外も全て削除しないでください。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/13f8d598-ee59-f572-d860-3bd914ea3ffa.png)

これは、先ほどの環境変数にある WEBSITE_CONTENTSHARE に紐づいています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/8f60da35-5a94-c3cf-e961-b30e3a6e11cc.png)

## Standard Logic Apps を利用するための最低限の権限
Standard Logic Apps を構築するにあたり、お客様のユーザーに対して設定が必要な組み込みロールについては以下の弊社ブログ記事にまとめておりますのでご確認いただければと思います。
[Logic Apps (Standard) を作成するために必要な最小権限](https://jpazinteg.github.io/blog/LogicApps/StandardLogicApps-Authorization/)

## Standard Logic Apps のデプロイ方法 (CI/CD)
Standard Logic Apps については Azure Portal からのデプロイ以外にも、以下の通り GitHub や Azure DevOps を利用したデプロイ方法がございます。
[シングルテナントの Azure Logic Apps への DevOps のデプロイ](https://learn.microsoft.com/ja-jp/azure/logic-apps/devops-deployment-single-tenant-azure-logic-apps)

Azure DevOps を利用した簡単なデプロイ方法に関する概要について以下のブログ記事にまとめておりますのでこちらを参照いただければと思います。
[Standard Logic Apps と Azure DevOps で CI/CD 環境を構成する](https://jpazinteg.github.io/blog/LogicApps/StandardLogicAppsCdci/)

また、参考までに ARM テンプレートベースで Logic Apps のリソースを構築されたい場合、 ARM テンプレートを [オートメーション] - [テンプレートのエクスポート] から確認される方も多いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/e8f511cf-236a-ce6d-056b-a2226fa886dd.png)

従量課金タイプではこちらのテンプレートにワークフローの JSON 定義情報が記載されますが、Standard Logic Apps のリソースの場合、ワークフローの情報は ARM テンプレートではなく個別にデプロイ（ZipDeploy など）する必要があるのでワークフローの情報は記載されません。
また、ARM テンプレートを作り込みいただく際に、[オートメーション] - [テンプレートのエクスポート] から確認した内容を基に他のリソースを作成するとテンプレートのデプロイ時にエラーになると言った事象があるかと思います。
これは、エラーの原因の大半が作り込みいただいた ARM テンプレート上に [resources] - [properties] - [siteConfig] - [appSettings] のプロパティが存在しないことが原因でエラーが発生していることが理由です。（もちろん、それ以外の事象もございます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/012ee358-0e28-3d0a-44c9-6acedde386bb.png)

テンプレートをエクスポートした際には、残念ながらプロパティに [appSettings] が反映されないので、自分で作り込みいただく必要が有ります。
具体的な設定値の参考値としては、Standard Logic Apps のリソースを新規作成する際に、[確認および作成] タブの画面右下にある [Automation のテンプレートをダウンロードする] を選択することで、どんな値が設定されているか確認いただくことが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/40665abd-cc3f-66c4-5271-9fc5e9a0b1c0.png)

これらの情報を基に、Standard Logic Apps のリソースをデプロイすることが可能です。

##  Standard Logic Apps で Kudu に接続
Standard Logic Apps が動作している App Service のプラットフォームについて、以下 App Service の公開情報と同じく、Logic Apps でも Kudu に接続することが可能です。
[Kudu サービスの概要](https://learn.microsoft.com/ja-jp/azure/app-service/resources-kudu)

始めに、Azure Portal より Standard Logic Apps を開き、[開発ツール] – [高度なツール] より Kudu を起動します。（ネットワークで接続制御されている場合、エラーとなる場合がございます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/801d88b0-4873-7723-e60f-f0c82fd41062.png)

そうすると、Azure AD OAuth の認証情報をもとめられるので、権限をお持ちのユーザーでログインします。

ログインすると、以下のような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/89f6fc46-3305-c62f-b6b8-e74b14f9ef20.png)

例えば、Process explorer では App Service Plan 上でどのようなプロセスが動作しているかを確認できたり、プロセスの停止等の操作が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/8f7618fd-ebaa-932a-5b02-eac106b3369b.png)

また、Debug console で CMD や PowerShell を選択いただくことで任意のコマンドを実行することが可能です。（ただし、いくつかのコマンドについては制御されて実行不可）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626174/b0cf0396-9c0d-27c3-86bb-91ca4ab58015.png)

以下のブログのように、Standard Logic Apps からストレージアカウントとの疎通確認などで利用することが可能です。
[Standard Logic Apps からストレージ アカウントへの疎通を確認する](https://jpazinteg.github.io/blog/LogicApps/StandardLogicApps-Ping/)

## その他 Logic Apps でよく使う情報
・式関数
Logic Apps では Excel 関数のようにアクションやトリガーの中で以下の式関数を利用することが可能です。細かい値の作り込みなどで是非お役立て下さい。
[Azure Logic Apps および Power Automate のワークフロー式関数のリファレンス ガイド](https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference)

・コネクタ一覧
Logic Apps で利用できるコネクタの一覧です。
[すべての Logic Apps コネクタの一覧](https://learn.microsoft.com/ja-jp/connectors/connector-reference/connector-reference-logicapps-connectors)

また、Standard Logic Apps のサービスプロバイダーコネクタ（組み込みコネクタ）の一覧は以下になります。
[Azure Logic Apps Standard built-in service provider connectors documentation](https://learn.microsoft.com/en-us/azure/logic-apps/connectors/built-in/reference/)

こちらも是非お役立て下さい。

・Microsoft サポートエンジニアのブログ
Microsoft 社員で以下のブログ記事を不定期に更新しています。主に Logic Apps に関する記事が多いのですが、MSMQ に関する Tips 等も更新しています。是非お役立ていただければと思います。
[Japan Azure Integration Support Blog](https://jpazinteg.github.io/blog/)

## さいごに
本記事では、Standard Logic Apps の概要や各接続情報に関する内容を基に少しだけ深堀してみました。皆様の理解が深まりましたら幸いです。最後までお付き合いいただきありがとうございました。