【Azure②】サーバレスサービスによるWebサービス自動監視ツールの作成

Azure

Azureサーバレスサービスの比較検討

Azureのサーバーレスコンピューティングサービス(要はサーバーを立てずにコードだけ実行できるようなサービス)は、主に次の4つがあります。

  • Microsoft Power Automate (旧称 Microsoft Flow)
  • Azure Logic Apps
  • Azure Functions
  • Azure App Service WebJobs

それぞれについて軽く調べた上で、今回作成するツールに合う方式を検討します。

Azureサーバレスサービスの比較

参考:Azure における統合と自動化の適切なサービスを選ぶ
参考サイトの内容を基に、それぞれのサービスについて比較してみました。
~本記事は、いずれ別途まとめ記事にする予定です~

Azureサーバレスサービスの概要

サービス 概要 備考
Microsoft Power Automate  (旧称 Microsoft Flow) RPA的なサービスで手作業を自動で実行してくれる。
様々なトリガーから起動される「フロー」と呼ばれる業務処理を定義し、RPA的に操作の自動化を行うことが可能。
フローには次の3種類がある。
・クラウドフロー
・Desktopフロー
・ビジネスプロセスフロー
実装例)
メール受信をトリガーに自動転送する、Webサイトからデータを取得しExcelにコピーする、一連の業務プロセス(承認など)をフロー化する、等

基本的に作成者がコードを記述することなく、トリガーやコネクタとして提供されるパーツを組み合わせてフローを作成する。
独自のコードを使用してコネクタを作成することも可能。

コネクタ:swaggerという仕組みで作成されたREST APIに対するプロキシの役割をし、認証等を受け持つ。MSのサービス等に接続するためのコネクタが300以上用意されている。
アクション:swaggerで定義された操作。
https://docs.microsoft.com/ja-jp/power-automate/flow-types
コネクタ:
https://docs.microsoft.com/ja-jp/connectors/
Azure Logic Apps Power Automateと同じようなワークフローサービス。(Power AutomateはLogic Apps上に構築されている)
Power AutomateはLogic Appsの簡易版のような位置づけで、非開発者に向けたサービスであるのに対し、Logic Appsは開発者向けのサービスであり、Visual Studio Code、Visual Studio、をサポート、App Serviceへの配備やシングルテナント(専用環境)への配備が可能である点を踏まえると、よりEnterprise向けのサービスであると言える。
フローからAzure Functionを呼び出すことが可能で、コードを書きたい場合はAzure Functionに記述する。

その他、次のような特徴がある。
・Microsoft Biz Talk Server、Azure Service Bus、Azure API Managementとの統合が可能
・EDIFACT、AS2、X12、RosettaNetのプロトコルによるメッセージ交換が可能
・XMLメッセージとフラットファイルにも対応
・ドメインを跨いだB2B統合アカウントの利用が可能(組織を跨いだ処理が実装可能)
Azure Logic Apps の概要 – Azure Logic Apps | Microsoft Docs
Azure Functions Azure App Service上で実行される。Azure
様々なトリガーにより実行されるサーバレスの関数。
トリガーに応じて、APIエンドポイント、スケジュールタスク、メッセージキューシステム等を作成可能。
料金プランによってタイムアウト時間に制約がある(従量課金:最大10分、Premium・専用プラン:無制限)。
他にもインスタンス数、要求サイズ、インスタンス割当メモリ量等にも制約がある。

Azure Functions は、WebJobs SDK の上に構築されているため、同じイベント トリガーや他の Azure サービスとの接続を数多く共有する。
Azure Functions の概要 | Microsoft Docs
Durable Functions Durable Functions は、サーバーレス コンピューティング環境でステートフル関数やステートフルエンティティ(※)を記述できる Azure Functions の拡張機能
※ステートフル関数:前処理の状態や結果を次の処理に引き継いで実行する一連の処理のこと
 ステートフルエンティティ:複数関数を組み合わせて全体の処理を構成するような場合に、全体の処理が終了するまでデータを保持しておくことが可能な領域
実装パターン)
 前処理の出力を次処理の入力にする(関数チェーン)
 複数処理を並列実行し完了を待ち合わせる(ファンアウト/ファンイン)
 時間のかかる処理に対するAPIリクエストをポーリング用のエンドポイントへリダイレクト(非同期HTTP API)
 ワークフロー内部でのポーリングによる処理待ち(モニター)
 承認プロセスで承認者が応答しない場合にエスカレーション(人による操作)
 多重実行されるような期間データの集計(アグリゲーター(ステートフルエンティティ))
 
Azure App Service WebJobs Azure App Service上で動作するWebアプリやAPIアプリと同じインスタンスで実行されるプログラム。App Service上のWebアプリ等のバックグラウンド処理を構築する際に利用され、App Serviceで動作するあらゆるプログラム、スクリプトを実行可能。

Azure Functionsとの差は、次の点。(https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-compare-logic-apps-ms-flow-webjobs#comparison-table
・サーバレスのアプリモデル、自動スケーリングに非対応
・ブラウザでの開発とテストに非対応
・従量課金制に非対応
・Logic Appsとの統合に非対応
・イベントトリガーとして、HTTP/WebHook(GitHub、Slack)に非対応(REST APIを作詞できない?)
・イベントトリガーとしてAzure Event Gridに非対応
・イベントトリガーとしてファイルシステムに対応

WebJobs SDKとは・・・AzureサービスのイベントをトリガーとしてWebJobsを起動するためのフレームワーク
※App Service on Linuxでは未サポート(2022/8/9時点)

Azureサーバレスサービスの機能比較

サービス HTTPリクエストの送信と結果判定可否 外部通知 使用可能言語 開発方法
Microsoft Power Automate (旧称 Microsoft Flow) HTTPトリガー又はHTTPアクションを使用することでリクエストの送信は可能(https://docs.microsoft.com/ja-jp/azure/connectors/connectors-native-http
HTTPトリガーであれば、HTTPリクエストをポーリングして、特定の結果の時だけ応答することも可能。
※コネクタについてはPowerPlatform、LogicAppsと同じものが使用可能
SMSコネクタは標準で
lineコネクタは、Line Messaging APIを使用して自作可能
https://docs.microsoft.com/ja-jp/connectors/


※Line Messaging APIは1000通/月までは無料。
https://www.linebiz.com/jp/service/line-official-account/plan/
ただし、Line公式アカウントが必要(検索結果に表示させないことは可能だが、完全非公開にはできない)
なし
※外部に作成したAPI(コネクタ)を呼び出すことは可能
ブラウザやTeams等のGUI
Azure Logic Apps 同上 同上
※コネクタに関する仕様はPower Automateと共通
https://docs.microsoft.com/ja-jp/connectors/
同上
https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-create-api-app
Azure portal、Visual Studio Code、またはVisual StudioでAzure Logic Appsのワークフロー デザイナーを使用
Azure Functions まあ普通に出来るでしょう
※ただし、リクエスト処理は独自実装になる可能性がある。
メール送信にはSendGrid、Customers Mail Cloud等のサービスが必要かも。
LineへのアクセスはLine Messaging APIを使用して可能。
C# / F# / JavaScript / Java / Python / PowerShell / TypeScript 使用する言語に対応したエディタやEDIは使用可能。
VS、VSCode、Azure Function Core ToolsではAzureへの直接配備が可能。
Intellij IDEA、Maven、Gradleを使った配備も可能。
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-develop-local
https://docs.microsoft.com/ja-jp/azure/azure-functions/create-first-function-cli-java?tabs=bash%2Cazure-cli%2Cbrowser
Durable Functions 同上 同上 .NET / C# / F# / JavaScript / TypeScript / Python / PowerShell / Java (プレビュー) 同上?
Azure App Service WebJobs 同上 不明 App Service のサンドボックス内で動作するあらゆるプログラムまたはスクリプトを実行可能
※WebJobs SDKを使用する場合はC#のみ
Azure Portal、Visual Studio

Azureサーバレスサービスの費用比較

サービス 価格(課金方式、東日本、円換算) ※従量課金の価格のみ調査
Microsoft Power Automate (旧称 Microsoft Flow) ・従量課金:¥65~326/1実行
Azure Logic Apps ・従量課金:
 ・アクションあたりの費用・・・¥0.003844/1実行 ※最初の4000は無料
 ・コネクタの通話数あたりの費用・・・¥0.017846/通話(Standardコネクタ)、¥0.137276/通話(エンタープライズコネクタ)
Azure Functions ・従量課金(関数が実行されているリソースに応じた課金※自動スケーリングされる):
 ・実行時間・・・¥0.002197/GB 秒(1秒当たりのリソース使用料)※400,000GB 秒まで無料
 ・総実行回数・・・¥27.456/100万実行 ※100万実行まで無料
※従量課金以外に次のプランがある
・Premiumプラン(自動スケーリング、仮想ネットワークへの接続、ウォーム待機等が可能)
・専用プラン(App Service内で実行する※App Serviceの料金がかかる)
Kubernetes、ASEへの配備では追加費用は掛からない(配備先サービスにかかる費用のみ)
Durable Functions 同上
Azure App Service WebJobs ※Azure App Serviceの価格に含まれる。
アプリ数:10、ディスク1GBまでは無料。

今回はAzureで提供されている主要なサーバレスコンピューティングサービスについて調べてみました。
感触としては、Logic Apps+Azure Functionsで実装するのが、環境構築やフロー作成の手間はかからない上に、ある程度の実装の自由度が確保できそうで良いと感じました。
次回は、調べた結果を基に実際のツールの実現方式を検討していきます。

 

コメント

タイトルとURLをコピーしました