Azure Functions を使用してロジック アプリ ワークフローを呼び出して、実行時間の長いタスクを設定する
適用対象: Azure Logic Apps (従量課金)
実行時間の長いリスナーまたはタスクをデプロイする必要がある場合は、要求トリガーと Azure Functions を使用してそのトリガーを呼び出し、ワークフローを実行するロジック アプリ ワークフローを作成できます。
たとえば、Azure Service Bus キューに到達したメッセージをリッスンする関数を作成できます。 このイベントが発生すると、関数によって要求トリガーが呼び出されます。これは、ワークフローを自動的に実行するプッシュ トリガーとして機能します。
この攻略ガイドでは、要求トリガーで始まるロジック アプリ ワークフローを作成する方法を示します。 次に、Service Bus キューをリッスンする関数を作成します。 メッセージがキューに到達すると、要求トリガーによって作成されたエンドポイントが関数によって呼び出され、ワークフローが実行されます。
注意
従量課金または Standard ロジック アプリ ワークフローのどちらを使用してもこの動作を実装できますが、この例では従量課金ワークフローで続行します。
前提条件
Azure アカウントとサブスクリプション。 サブスクリプションがない場合は、無料アカウントを作成します。
Service Bus 名前空間。 名前空間がない場合は、最初に名前空間を作成します。 詳細については、「Azure Service Bus とは」を参照してください。
関数のコンテナーである関数アプリ。 関数アプリがない場合は、最初に関数アプリを作成し、ランタイム スタックのプロパティとして .NET を選択するようにしてください。
ロジック アプリ ワークフローの作成方法に関する基礎知識。 詳細については、「マルチテナント Azure Logic Apps で従量課金ロジック アプリ ワークフローの例を作成する」をご覧ください。
ロジック アプリ ワークフローを作成する
Azure portal で、[空のロジック アプリ] テンプレートを選択して、空の従量課金ロジック アプリを作成します。
デザイナーが開いた後、デザイナーの検索ボックスで、[組み込み] を選択します。 検索ボックスに「request」と入力します。
トリガーの一覧から、[HTTP 要求の受信時] というトリガーを選択します。
要求トリガーでは、キュー メッセージで使用する JSON スキーマを必要に応じて入力できます。 JSON スキーマは、デザイナーの入力データの構造の理解を支援すると共に、その出力をユーザーがワークフローで使用しやすくします。
スキーマを指定するには、[要求本文の JSON スキーマ] ボックスにスキーマを入力します。
スキーマはなくても JSON 形式のサンプル ペイロードがあれば、そのペイロードからスキーマを生成することができます。
要求トリガーで [サンプルのペイロードを使用してスキーマを生成する] を選択します。
[サンプルの JSON ペイロードを入力するか、貼り付けます] でサンプル ペイロードを入力し、 [完了] を選択します。
前に示したサンプル ペイロードでは、トリガーに表示される次のスキーマが生成されます。
{ "type": "object", "properties": { "address": { "type": "object", "properties": { "number": { "type": "integer" }, "street": { "type": "string" }, "city": { "type": "string" }, "postalCode": { "type": "integer" }, "country": { "type": "string" } } } } }
トリガーの下に、受信したメッセージの処理に使用する他のアクションを追加します。
たとえば、Office 365 Outlook コネクタを使ってメールを送信するアクションを追加できます。
ロジック アプリ ワークフローを保存します。
この手順で、ワークフロー内の要求トリガーのコールバック URL が生成されます。 このコールバック URL は、後で Azure Service Bus キューのトリガーのコードで使用します。 このコールバック URL は、HTTP POST URL プロパティに表示されます。
関数を作成する
次に、キューをリッスンし、メッセージが到達したときに要求トリガーでエンドポイントを呼び出す関数を作成します。
Azure portal で、関数アプリを開きます。
関数アプリのナビゲーション メニューで、[関数] を選択 します。 [関数] ペインで、[作成] を選択します。
[テンプレートの選択] で、[Azure Service Bus キュー トリガー] という名前のテンプレートを選択します。 テンプレートの選択に基づいてさまざまなオプションが表示される [テンプレートの詳細] セクションが表示されたら、次の情報を入力します。
プロパティ 値 説明 新規関数 <function-name> 関数の名前を入力します。 Service Bus connection <Service-Bus-connection> [新規] を選択して、Service Bus SDK OnMessageReceive()
リスナーを使用する Service Bus キューの接続を設定します。キュー名 <queue-name> キューの名前を入力します。 完了したら [作成] を選択します。
Azure portal には、新しい Azure Service Bus キュー トリガー関数の [概要] ページが表示されます。
次に、前に作成したロジック アプリ ワークフローのエンドポイントを呼び出す基本的な関数を記述します。 関数を記述する前に、次の考慮事項を確認してください。
キュー メッセージからのメッセージを使用して関数をトリガーします。
関数が同時に実行される、ボリュームが大きくなる、あるいは負荷が高くなる可能性があるため、
using
ステートメントで HTTPClient クラスをインスタンス化し、要求ごとに HTTPClient インスタンスを直接作成することは避けてください。 詳細については、「HttpClientFactory を使用して回復力の高い HTTP 要求を実装する」を参照してください。可能な場合は、HTTP クライアントのインスタンスを再利用します。 詳細については、「Azure Functions での接続の管理」を参照してください。
次の例では、非同期モードで
Task.Run
メソッドが使用されています。 詳細については、Async および Await を使用した非同期プログラミングに関するページをご覧ください。 この例でも、application/json
メッセージのコンテンツの種類を使用していますが、必要に応じて種類を変更できます。using System; using System.Threading.Tasks; using System.Net.Http; using System.Text; // Set up the URI for the logic app workflow. You can also get this value on the logic app's 'Overview' pane, under the trigger history, or from an environment variable. private static string logicAppUri = @"https://prod-05.westus.logic.azure.com:443/workflows/<remaining-callback-URL>"; // Reuse the instance of HTTP clients if possible. For more information, see https://learn.microsoft.com/azure/azure-functions/manage-connections. private static HttpClient httpClient = new HttpClient(); public static async Task Run(string myQueueItem, TraceWriter log) { log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}"); var response = await httpClient.PostAsync(logicAppUri, new StringContent(myQueueItem, Encoding.UTF8, "application/json")); }
ロジック アプリ ワークフローをテストする
テスト用に、次の手順またはその他のツールを使用して、Service Bus キューにメッセージを追加します。
Azure portal で、ご利用の Service Bus 名前空間に移動します。
Service Bus 名前空間のナビゲーション メニューで、[キュー] を選択します。
Service Bus 接続を使用して、前に関数にリンクした Service Bus キューを選択します。
キュー ナビゲーション メニューで [Service Bus Explorer] を選択し、ツール バーの [メッセージの送信] を選択します。
[メッセージの送信] ペインで、Service Bus キューに送信するメッセージを指定します。
このメッセージにより、ロジック アプリ ワークフローがトリガーされます。