Azure Functions を使用してロジック アプリ ワークフローを呼び出して、実行時間の長いタスクを設定する

適用対象: Azure Logic Apps (従量課金)

実行時間の長いリスナーまたはタスクをデプロイする必要がある場合は、要求トリガーと Azure Functions を使用してそのトリガーを呼び出し、ワークフローを実行するロジック アプリ ワークフローを作成できます。

たとえば、Azure Service Bus キューに到達したメッセージをリッスンする関数を作成できます。 このイベントが発生すると、関数によって要求トリガーが呼び出されます。これは、ワークフローを自動的に実行するプッシュ トリガーとして機能します。

この攻略ガイドでは、要求トリガーで始まるロジック アプリ ワークフローを作成する方法を示します。 次に、Service Bus キューをリッスンする関数を作成します。 メッセージがキューに到達すると、要求トリガーによって作成されたエンドポイントが関数によって呼び出され、ワークフローが実行されます。

注意

従量課金または Standard ロジック アプリ ワークフローのどちらを使用してもこの動作を実装できますが、この例では従量課金ワークフローで続行します。

前提条件

ロジック アプリ ワークフローを作成する

  1. Azure portal で、[空のロジック アプリ] テンプレートを選択して、空の従量課金ロジック アプリを作成します。

  2. デザイナーが開いた後、デザイナーの検索ボックスで、[組み込み] を選択します。 検索ボックスに「request」と入力します。

  3. トリガーの一覧から、[HTTP 要求の受信時] というトリガーを選択します。

    ポータルのデザイナーのスクリーンショット。検索ボックスに 'http request' が含まれています。[トリガー] の [HTTP 要求の受信時] が強調表示されています。

    要求トリガーでは、キュー メッセージで使用する JSON スキーマを必要に応じて入力できます。 JSON スキーマは、デザイナーの入力データの構造の理解を支援すると共に、その出力をユーザーがワークフローで使用しやすくします。

  4. スキーマを指定するには、[要求本文の JSON スキーマ] ボックスにスキーマを入力します。

    HTTP 要求トリガーの詳細のスクリーンショット。一部の JSON コードは、[要求本文の JSON スキーマ] ボックスに表示されます。

    スキーマはなくても JSON 形式のサンプル ペイロードがあれば、そのペイロードからスキーマを生成することができます。

    1. 要求トリガーで [サンプルのペイロードを使用してスキーマを生成する] を選択します。

    2. [サンプルの JSON ペイロードを入力するか、貼り付けます] でサンプル ペイロードを入力し、 [完了] を選択します。

      HTTP 要求トリガーの詳細のスクリーンショット。[サンプル JSON ペイロードを入力または貼り付ける] の下に、ペイロード データがいくつか表示されています。

      前に示したサンプル ペイロードでは、トリガーに表示される次のスキーマが生成されます。

      {
         "type": "object",
         "properties": {
            "address": {
               "type": "object",
               "properties": {
                  "number": {
                     "type": "integer"
                  },
                  "street": {
                     "type": "string"
                  },
                  "city": {
                     "type": "string"
                  },
                  "postalCode": {
                     "type": "integer"
                  },
                  "country": {
                     "type": "string"
                  }
               }
            }
         }
      }
      
  5. トリガーの下に、受信したメッセージの処理に使用する他のアクションを追加します。

    たとえば、Office 365 Outlook コネクタを使ってメールを送信するアクションを追加できます。

  6. ロジック アプリ ワークフローを保存します。

    この手順で、ワークフロー内の要求トリガーのコールバック URL が生成されます。 このコールバック URL は、後で Azure Service Bus キューのトリガーのコードで使用します。 このコールバック URL は、HTTP POST URL プロパティに表示されます。

    HTTP 要求トリガーの詳細のスクリーンショット。[HTTP POST URL] の横に URL が表示されています。

関数を作成する

次に、キューをリッスンし、メッセージが到達したときに要求トリガーでエンドポイントを呼び出す関数を作成します。

  1. Azure portal で、関数アプリを開きます。

  2. 関数アプリのナビゲーション メニューで、[関数] を選択 します。 [関数] ペインで、[作成] を選択します。

    関数アプリ のメニューで [関数] が強調表示されている関数アプリのスクリーンショット。[関数] ページが開き、[作成] が強調表示されています。

  3. [テンプレートの選択] で、[Azure Service Bus キュー トリガー] という名前のテンプレートを選択します。 テンプレートの選択に基づいてさまざまなオプションが表示される [テンプレートの詳細] セクションが表示されたら、次の情報を入力します。

    プロパティ 説明
    新規関数 <function-name> 関数の名前を入力します。
    Service Bus connection <Service-Bus-connection> [新規] を選択して、Service Bus SDK OnMessageReceive() リスナーを使用する Service Bus キューの接続を設定します。
    キュー名 <queue-name> キューの名前を入力します。

    [関数の作成] ペインのスクリーンショット。[Azure Service Bus キュー トリガー] が強調表示され、テンプレートの例の詳細が入力されています。

  4. 完了したら [作成] を選択します。

    Azure portal には、新しい Azure Service Bus キュー トリガー関数の [概要] ページが表示されます。

  5. 次に、前に作成したロジック アプリ ワークフローのエンドポイントを呼び出す基本的な関数を記述します。 関数を記述する前に、次の考慮事項を確認してください。

    • キュー メッセージからのメッセージを使用して関数をトリガーします。

    • 関数が同時に実行される、ボリュームが大きくなる、あるいは負荷が高くなる可能性があるため、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 キューにメッセージを追加します。

  1. Azure portal で、ご利用の Service Bus 名前空間に移動します。

  2. Service Bus 名前空間のナビゲーション メニューで、[キュー] を選択します。

    Service Bus 名前空間のスクリーンショット。ナビゲーション メニューの [キュー] が強調表示されています。

  3. Service Bus 接続を使用して、前に関数にリンクした Service Bus キューを選択します。

  4. キュー ナビゲーション メニューで [Service Bus Explorer] を選択し、ツール バーの [メッセージの送信] を選択します。

    ポータルの Service Bus キュー ページのスクリーンショット。[メッセージの送信] が強調表示されています。ナビゲーション メニューの [Service Bus Explorer] が強調表示されています。

  5. [メッセージの送信] ペインで、Service Bus キューに送信するメッセージを指定します。

    このメッセージにより、ロジック アプリ ワークフローがトリガーされます。

次のステップ