Azure Logic Apps でのメッセージの送信、受信、バッチ処理
適用対象: Azure Logic Apps (従量課金プラン + Standard)
複数のメッセージをグループとして特定の方法で送信および処理するには、バッチ ソリューションを作成します。 このソリューションでは、メッセージが "バッチ" に収集され、指定された条件が満たされるまで待機してから、バッチ化されたメッセージが解放されて処理されます。 バッチ処理を使うことで、ロジック アプリによるメッセージ処理の頻度を下げることができます。
この攻略ガイドでは、バッチ処理ソリューションの構築方法について説明します。同じ Azure サブスクリプション、同じ Azure リージョン内に、次の順序で 2 つのロジック アプリを作成します。
"バッチ受信" ロジック アプリ。メッセージをリリースして処理する条件を指定しておくと、その条件が満たされるまでメッセージを受け取り、バッチとして収集します。 バッチ送信アプリを作成するときにバッチの送信先を選ぶことができるよう、必ずこのバッチ受信アプリを先に作成してください。
"バッチ送信" ロジック アプリ (1 つまたは複数)。先に作成しておいたバッチ受信アプリにメッセージを送信します。
バッチ送信アプリは一意のキーを指定して、そのキーに基づいてターゲット バッチを論理上のサブセットに "パーティション" (分割) することもできます。 たとえば、顧客番号は一意のキーです。 こうすることで受信アプリは、同じキーのアイテムをすべて収集し、まとめて処理することができます。
バッチ受信アプリとバッチ送信アプリは、同じ Azure サブスクリプションを共有し、"なおかつ" 同じ Azure リージョンを共有している必要があります。 異なる場合は互いを認識できず、バッチ送信アプリを作成するときにバッチ受信アプリを選択できません。
前提条件
Azure アカウントとサブスクリプション。 サブスクリプションをお持ちでない場合には、無料の Azure アカウントにサインアップしてください。
任意の Azure Logic Apps でサポートされる電子メール プロバイダーの電子メール アカウント
重要
Gmail コネクタの使用を希望する場合、ロジック アプリで制限なしにこのコネクタを使用できるのは、G-Suite ビジネス アカウントだけです。 Gmail コンシューマー アカウントを持っている場合は、Google によって承認された特定のサービスのみでこのコネクタを使用できるほか、認証に使用する Google クライアント アプリを Gmail コネクタで作成することができます。 詳細については、「Azure Logic Apps での Google コネクタのデータ セキュリティとプライバシー ポリシー」を参照してください。
ロジック アプリ ワークフローに関する基本的な知識
Azure portal ではなく Visual Studio Code を使う場合は、Azure Logic Apps と連携するように Visual Studio Code を設定してください。
制限事項
リリース後にバッチ内のコンテンツをチェックするには、リリースされたコンテンツとソースを比較する必要があります。
バッチを早期にリリースするには、トリガーにバッチがまだある間に、このガイドで説明されるバッチ レシーバーのリリース条件を変更する必要があります。 ただし、トリガーは未送信のメッセージに対して更新後のリリース条件を使用します。
バッチ受信アプリの作成
バッチにメッセージを送信するには、その送信先となるバッチがあらかじめ存在していなければなりません。 そのためまず、バッチ トリガーから始まる "バッチ受信" ロジック アプリ ワークフローを作成する必要があります。 そうすることで、"バッチ送信" ロジック アプリ ワークフローを作成するときに、そのバッチ受信ロジック アプリ ワークフローを選択できます。 メッセージをリリースして処理する条件を指定しておくと、バッチ受信アプリは、その条件が満たされるまでメッセージを収集し続けます。 バッチ受信アプリは、バッチ送信アプリについての情報を一切必要としませんが、バッチ送信アプリには、どこにメッセージを送信すべきかの情報が必要です。
Azure portal で、空のワークフローを含むロジック アプリ リソースを作成します。
この例では、BatchReceiver という名前のバッチ受信ロジック アプリとワークフローを作成します。
ワークフロー デザイナーで [トリガーの追加] を選択し、次の一般的な手順に従って、バッチ トリガーという名前のバッチ操作トリガーを追加します。
次のトリガー プロパティを設定します。
プロパティ 説明 Mode
(従量課金ワークフローのみ)- インライン: リリース条件をバッチ トリガー内に定義する場合に使用します。
- 統合アカウント: 統合アカウントを通じてリリース条件の構成を複数定義します。 統合アカウントを使用すると、これらの構成を個別のロジック アプリ リソースではなく、1 か所で管理できます。バッチ名 バッチの名前。 従量課金ワークフローでは、このプロパティは、[モード] が [インライン] に設定されている場合にのみ表示されます。 この例では、TestBatch を使用します。 リリース条件 各バッチを処理する前に満たす条件。 既定では、バッチ トリガーは "インライン モード" を使用して動作し、バッチ トリガー内でバッチ リリース条件を定義します。
- - : バッチによって収集されたメッセージの数に基づいてバッチをリリースします。
- - : そのバッチによって収集されたすべてのメッセージの合計サイズ (バイト) に基づいてバッチをリリースします。
- スケジュール ベース: 間隔と頻度を指定する定期的なスケジュールに基づいてバッチをリリースします。 必要に応じてタイム ゾーンを選択し、開始日時を指定できます。
指定されたすべての条件を使用するには、すべてのオプションを選択します。メッセージ数 バッチとして収集するメッセージの数 (10 件など)。 バッチ メッセージの上限は 8,000 メッセージです。 バッチ サイズ バッチで収集するメッセージの合計バイト サイズ (例: 10 MB)。 バッチ サイズの上限は 80 MB です。 繰り返し バッチをリリースする間隔と頻度 (10 分など)。 最小間隔は 60 秒 (1 分) です。 分の小数値は 1 分単位に切り上げられます。 必要に応じて、タイム ゾーンを選択し、開始日時を指定できます。 Note
バッチ処理はしたが未送信のメッセージがトリガーにまだある間に、リリース条件を変更すると、そのトリガーでは、未送信のメッセージを処理するために、更新されたリリース条件が使用されます。
この例では、すべての条件を示していますが、ご自分のテストを行う場合は、条件を 1 つだけ試してください。
それぞれのバッチを処理するアクションを少なくとも 1 つ追加します。
この例では、バッチ トリガーが起動したときにメールを送信するアクションを追加します。 バッチのメッセージが 10 件に達するか、10 MB に達するか、または 10 分が経過すると、トリガーが作動してメールが送信されます。
バッチ トリガーの下で、プラス (+) 記号 > [アクションの追加] を選択します。
メール プロバイダーに基づいてメールを送信するアクションを追加するには、次の一般的な手順に従います。
たとえば、職場または学校アカウント (@fabrikam.com や @fabrikam.onmicrosoft.com など) がある場合は、@fabrikam.com コネクタを選択します。 個人用アカウント (@outlook.com、@hotmail.com など) がある場合は、@outlook.com コネクタを選択します。 この例では Microsoft 365 Outlook コネクタを使用します。
メッセージに従ってメール アカウントにサインインします。
次のアクション プロパティを設定します。
[宛先] ボックスに、受信者の電子メール アドレスを入力します。 テスト目的で自分の電子メール アドレスを使用できます。
[件名] ボックス内を選択すると、動的コンテンツ リスト (稲妻アイコン) と式エディター (関数アイコン) のオプションが表示されます。 稲妻アイコンを選択して動的コンテンツ リストを開き、[パーティション名] というフィールドを選択します。
後のバッチ送信アプリで、ターゲット バッチを分割する一意のパーティション キーを指定し、分割された論理上のサブセットにメッセージを送信することができます。 各セットにはバッチ送信ロジック アプリ ワークフローで生成された固有の番号があります。 この機能により複数のサブセットを持つ単一のバッチを使用できるようになり、各サブセットを指定した名前で定義できます。
重要
パーティションには 5,000 メッセージまたは 80 MB という制限があります。 どちらかの条件が満たされた場合、ユーザーによって定義されたリリース条件が満たされていなくても、Azure Logic Apps によってバッチがリリースされる可能性があります。
[本文] ボックス内を選択し、稲妻アイコンを選択して動的コンテンツ リストを開き、[メッセージ ID] フィールドを選択します。
ワークフロー デザイナーでは、メール送信アクションを囲む For each ループが自動的に追加されます。これは、そのアクションで、前のアクションの出力をバッチではなくコレクションとして処理するためです。
次の例は、デザイナーで [For each] タイトル ボックスを選択した後の情報ペインを示しています。ここで、[Batched Items] はコレクション名です。
ワークフローを保存します。 バッチ受信アプリの作成は以上です。
重要
Visual Studio Code を使用している場合は、次のセクションに進む前に、まず、バッチ受信アプリ ロジック アプリを Azure に "デプロイ" します。 そうしないと、バッチ送信ロジック アプリ ワークフローを作成するときに、バッチ受信ロジック アプリ ワークフローを選択できません。
バッチ送信アプリの作成
次に、バッチ受信ロジック アプリ ワークフローにメッセージを送信するバッチ送信ロジック アプリ ワークフローを作成します。 バッチ送信アプリにはそれぞれ、バッチ受信アプリ、バッチ名、メッセージ コンテンツなど各種の設定を指定します。 一意のパーティション キーを指定してバッチを論理上のサブセットに分割し、そのキーを持つメッセージを収集するように設定することもできます。
バッチ送信アプリを作成するときに、その送信先バッチとして既存のバッチ受信アプリを選択できるよう、必ず先にバッチ受信アプリを作成してデプロイしてください。 バッチ受信アプリは、バッチ送信アプリについての情報を一切必要としませんが、バッチ送信アプリには、どこにメッセージを送信すべきかの情報が必要です。
バッチ受信アプリとバッチ送信アプリは、同じ Azure リージョンを共有し、"なおかつ" 同じ Azure サブスクリプションを共有している必要があります。 異なる場合は互いを認識できず、バッチ送信アプリを作成するときにバッチ受信アプリを選択できません。
BatchSender という名前の別のロジック アプリ リソースとワークフローを作成します。
Note
Standard ロジック アプリ リソースがある場合は、ステートレス ワークフローでは繰り返しトリガーが使用できないため、ステートレス ワークフローではなくステートフル ワークフローを作成してください。
Recurrence という名前の Schedule トリガーを追加するには、次の一般的な手順に従います。
この例では、送信者ワークフローを 1 分ごとに実行する間隔と頻度を設定します。
メッセージをバッチに送信する新しいアクションを追加します。
繰り返しトリガーの下で、プラス (+) 記号 > [新しいアクションの追加] を選択します。
次の一般的な手順に従って、バッチ トリガー ワークフローに送信 (従量課金ワークフロー) またはバッチに送信 (Standard ワークフロー) という名前のバッチ操作アクションを追加します。
従量課金ワークスフローと Standard ワークフローのどちらを使用しているかに基づいて、対応する手順に従ってください。
従量課金ワークフロー
バッチ トリガー ワークフローに送信 アクションを追加すると、リストが表示され、バッチ送信ロジック アプリ リソースと同じ Azure サブスクリプション "および" Azure リージョンに存在するバッチ トリガーを持つロジック アプリ リソースのみが表示されます。
ロジック アプリ リストから、バッチ受信として使用する、以前に作成したロジック アプリを選択します。 使用可能なトリガーが表示されたら、Batch_messages という名前のトリガーを選択します。
重要
Visual Studio Code を使用している場合、選択するバッチ受信アプリが表示されないときは、バッチ受信アプリが既に作成されて Azure にデプロイ済みであることを確認します。 まだ済んでいない場合は、バッチ受信ロジック アプリ リソースを Azure にデプロイする方法を確認してください。
終了したら、[ステージの追加] を選択します。
Standard ワークフロー
バッチに送信アクションを追加すると、次の手順で操作ペインに次のプロパティが表示され、バッチ名、メッセージの内容、ワークフロー名、トリガー名を指定できます。 バッチ送信ロジック アプリと同じ Azure サブスクリプション "および" Azure リージョンに存在するバッチ トリガーを持つバッチ受信ロジック アプリ ワークフローの情報のみを指定できます。
次のバッチ受信アクションのプロパティを設定します。
プロパティ 説明 バッチ名 受信ロジック アプリによって定義されたバッチ名 (この例では TestBatch)
重要: バッチ名は実行時に検証されます。また、バッチ受信ロジック アプリによって指定された名前と一致している必要があります。 バッチ名を変更すると、バッチ送信アプリが失敗します。メッセージのコンテンツ 送信するメッセージの内容。 使用する値については、次の例を参照してください。 ワークフロー名
(Standard ワークフロー のみ)バッチ トリガーがあるワークフローの名前。 トリガー名 バッチ受信ロジック アプリ ワークフロー内のバッチ トリガーの名前。 従量課金ワークフローでは、選択したバッチ受信ロジック アプリからこの値が自動的に設定されます。 ワークフロー ID バッチ トリガー名バッチ受信ロジック アプリ ワークフローを持つワークフローの ID。 従量課金ワークフローでは、選択したバッチ受信ロジック アプリからこの値が自動的に設定されます。 この例では、[メッセージ コンテンツ] プロパティ値に次の式を追加します。これにより、バッチに送信するメッセージ コンテンツに現在の日付と時刻が挿入されます。
[メッセージ コンテンツ] ボックス内を選択すると、動的コンテンツ (稲妻アイコン) と式エディター (関数アイコン) のオプションが表示されます。
関数アイコンを選択して式エディターを開きます。
エディターで、utcnow() という名前の関数を入力し、[追加] を選択します。
従量課金ワークフロー
Standard ワークフロー
ここでバッチのパーティションを設定します。
バッチ送信操作ペインの [詳細パラメーター] リストから、次のプロパティを選択します。
プロパティ 説明 パーティション名 (省略可能) 一意のパーティション キー。ターゲット バッチを論理上のサブセットに分割し、そのキーに基づいてメッセージを収集する目的で使用されます。
この例では、1 から 5 までの乱数を生成する式を追加するには、次の手順を参照してください。メッセージ ID (省略可能) メッセージ ID。空のときは、生成されたグローバル一意識別子 (GUID) になります。 この例では、この値は空のままにします。 [パーティション名] ボックス内を選択し、式エディター (関数アイコン) のオプションを選択します。
式エディターで関数 rand(1,6) を入力し、[追加] を選択します。
この例では、1 から 5 までの数字を生成します。 これにより、この式が動的に設定した 5 つの番号のパーティションにこのバッチが分割されます。
完了すると、バッチ送信ワークフローは、ロジック アプリのワークフローの種類に基づいて、次の例のようになります。
従量課金ワークフロー
Standard ワークフロー
ワークフローを保存します。
ワークフローをテストする
バッチ ソリューションをテストするには、数分間ロジック アプリ ワークフローを実行したままにします。 間もなく、同じパーティション キーを持つ電子メールを 5 個ずつ取得し始めます。
バッチ送信ロジック アプリが 1 分おきに実行され、1 から 5 までの乱数が生成されます。 バッチ送信アプリは、メッセージを送信するターゲット バッチのパーティション キーとしてこの乱数を使用します。 バッチに同じパーティション キーの項目が 5 つ入るたびにバッチ受信ロジック アプリが作動し、各メッセージについてメールを送信します。
重要
テストが完了したら、BatchSender ロジック アプリ ワークフローを無効化または削除してメッセージの送信を停止し、受信トレイのオーバーロードを防止します。