[Azure] Azure Logic Apps で Azure Functions を繰り返し実行する


はじめに

Azure Functions の従量課金プランでは最大で 10 分のタイムアウト制限があり、実行に長時間かかる関数はそのままでは実行できません。
もし、ループ処理によって実行に時間がかかる場合は、そのループを Azure Logic Apps に任せることで 1 実行あたりの実行時間を抑えることができるかもしれません。
今回は、Azure Logic Apps を利用して、Azure Functions を繰り返し実行するロジックを実装してみます。

関数の作成

Azure Functions で Double という http トリガー関数を作成しました。
実行コードは以下の通り。
リクエストボディから渡された parameter を 2 倍して返す単純な関数です。

Double/index.js
module.exports = async function (context, req) {

    let param = parseInt(req.body.parameter);
    const result = param * 2;

    context.res = {
        body: result
    };
}

ロジックアプリの作成

空のロジックアプリの作成

続いて、ロジックアプリを作成しテンプレートから 空のロジック アプリ を選択します。
初めてロジックアプリを作成する方は、以下の公式ドキュメント クイックスタートをご参照ください。
https://docs.microsoft.com/ja-jp/azure/logic-apps/quickstart-create-first-logic-app-workflow#create-your-logic-app

トリガーの作成

ロジックアプリの中身を作成していきます。
トリガーは HTTP 要求の受信時 にしておきます。

変数の作成

次のステップは 変数を初期化する です。
今回は、繰り返し 2 倍する parameter 変数を作成し、初期値を 1 に設定します。

繰り返し処理の作成

繰り返し処理を作成します。制御まで を選択します。

今回は parameter が 1000 以上になるまで値を 2 倍し続けたいと思います。
繰り返しの制限 (回数上限、タイムアウト) も別途設定することができます。

アクションは先ほど作成した Azure Functions 関数 Double を設定し、要求本文 (ボディ) に JSON 形式で parameter を設定します。

最後にレスポンスとして返ってきた値を parameter に設定します。
返り値を Int() を使って整数値に parse して parameter 変数に設定するようにします。

以上でロジックアプリの作成は完了です。ロジックアプリを保存します。

ロジックアプリを実行してみる

画面上部の 実行 を押して、結果を確認してみます。
すると、繰り返し処理が 10 回転して、parameter の値が 1024 になるまで関数が実行されていることが確認できました!

さいごに

Azure Logic Apps を利用して、Azure Functions を繰り返し実行するロジックを実装してみました。
関数の実行時間が長くタイムアウト制限に引っかかる場合、解消法の一つとして検討してみてはいかがでしょうか。

参考文献