Azure Logic Appsでシングルテナントとプライベート通信を実現する方法

### はじめに
業務の中でAzure Logic Appsについていろいろと調べておりましたので、その備忘も踏まえてここに記載致します。
クラウド上で社内のWebサービス等を構成するときに、Web AppsのようなPaaSの利用が近年増えてきていると思います。その際に、通信を完全にプライベート接続のみして、バックボーンの共用もNGといった要件を出される企業（特に日系）も多いのではないでしょうか。
Azure Logic Appsで構成をするときも同じ壁に当たってくるので、その解決方法と考え方をここに記載致します。

<font color="Red">
※もし、記事の内容に誤りがあればコメントやDMでご指摘いただければと思います。よろしくお願い致します。
</font>

## シングルテナントとマルチテナント
一般的な考え方でシングルテナントとは何か、マルチテナントとは何かを説明します。以下動画を見てもらえればとても分かりやすいです。この記事でも少し触れておきます。
参考動画：[Tech Briefing : Azureではじめるマルチテナント型SaaSのポイント](https://youtu.be/_BG68kbO-4k?si=1AAZvZsCrdtVeilc)

#### シングルテナント
+ ユーザーごとにサーバー、アプリケーション、データベースを用意して、サービスを利用する形
+ サービス利用者の固有の環境として利用でき、カスタマイズなども自由にしやすい
+ 他のサービス利用者の環境は分離されており、セキュリティが担保される
+ 専有の環境となるため、利用料金はサービスを利用していないときも環境が存在する限り課金される。

#### マルチテナント
+ 複数のユーザーでサーバー、アプリケーションを共有してサービスを利用する形（）
+ 他のユーザーを環境を共有しており、独自カスタマイズを実装することが難しい
+ 基本的にサービスの保守をクラウドベンダーに完全に任せる形となり運用不可が低減される
+ 利用した分だけ料金を払う形態のサービスが多く、コスト最適化ができる

以下、[参考動画](https://youtu.be/_BG68kbO-4k?si=1AAZvZsCrdtVeilc)より抜粋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/3a64fc02-5465-0094-77a9-dafabb5b004d.png)

## Azure Logic Appsのプラン
Azure Logic Appsでは主に2つのプランが容易されており、それぞれがシングルテナントとマルチテナントの構成をとるようになっております。そのため、どちらを選択するかはどちらのシングルテナントが良いか、マルチテナントが良いかの観点から考えるとよさそうです。

以下に、プラン(対応するテナントの構成)とそれぞれの特徴について載せておきます。
詳細に知りたい方は以下Docsを見てみるといいでしょう。
参考文献：[Microsoft Learn：Standard シングルテナント ロジック アプリと従量課金マルチテナント ロジック アプリの違い](https://learn.microsoft.com/ja-jp/azure/logic-apps/single-tenant-overview-compare?source=recommendations)
#### Standardプラン(シングルテナント)
+ シングルテナント構成をとり、他のユーザーとは分離した構成をとる。
+ 1つのテナント内に10～15ほどのワークフローを作成可能。
+ PrivateendPoint(以下：PE)を組むことが可能で、通信のプライベート化もできる
+ 作成時に、構成ファイルを保管するStorageアカウントが自動で払い出される。
+ 裏で実はApp-Serviceがシングルテナント構成で起動しており、その上でLogicAppsの画面を構成したりしてくれているらしい。
+ Application Insightで監視ができる
+ メモリやCPUのコア数、証明書の利用など細かい設定が必要
+ 一応、使用していないときはサービスを停止できるようになっている。

#### 従量課金プラン(マルチテナント)
+ マルチテナント構成となり、他のユーザーとリソースを共有する
+ 1つのLogic Appsに原則1つのワークフローのみ作成ができる。
+ ネットワークは他のユーザーと共有
+ GRS構成をとってくれていて、データの保全は安心
+ CPU等の細かい設定はできないが、あまり気にしなくてよさげ

基本的な方針としては、プライベートな接続やシングルテナントを要求されている場合は原則Standard構成をとるのがよさそうです。それ以外の場合は従量課金プランから考えてみると良いでしょう。

## Azurr Logic AppsにおけるPE構成
続いて、Azure Logic Appsにおけるネットワークのプライベート化について記載していきます。必要になってくる通信のプライベート化は主に以下が考えられます。
+ 仮想マシンとの通信
+ Storageアカウントとの通信

### 仮想マシンとの通信
Azure Logic Appsと仮想マシン間の通信をプライベート通信にしたいときがあります。そういう時には、プライベート接続の設定をしていく必要がありますが、簡単にできます。
構成としては以下のようなイメージです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/0b7b7d08-794e-b335-95aa-accb23bcc58e.png)

##### 設定方法
新規作成時に以下チェックを付けていくだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/c53ce14b-2f92-7155-7699-a633f2a84f59.png)

参考資料：[Microsoft Learn:プライベート エンドポイントを使って Standard ロジック アプリと Azure 仮想ネットワーク間のトラフィックをセキュリティで保護する](https://learn.microsoft.com/ja-jp/azure/logic-apps/secure-single-tenant-workflow-virtual-network-private-endpoint?source=recommendations)

### Storageアカウントとの通信　
前述の通り、Standard構成の場合は設定ファイルなどを保管するためにStorageアカウントが自動で構成されます。そのStorageアカウントとAzure Logic Appsとでプライベートな通信をとりたいということもあるかと思います。

構成としては以下のようなイメージです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/e03ccd9d-ac1e-6841-7853-0d7369d024d6.png)

##### 設定方法
新規作成時に以下チェックを付けていくだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/2db91eee-7f22-a870-986d-d143dd9c0368.png)


参考資料：[Microsoft Learn：シングルテナントの Standard ロジック アプリをプライベート エンドポイントを使用してプライベート ストレージ アカウントにデプロイする](https://learn.microsoft.com/ja-jp/azure/logic-apps/deploy-single-tenant-logic-apps-private-storage-account)