Azure Logic Apps で HTTPS エンドポイントを使用して、ロジック アプリの呼び出し、トリガー、または入れ子を行います

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

ロジック アプリを URL 経由で呼び出せて、他のサービスから入ってくる要求を受信できるようにするため、ロジック アプリで要求ベースのトリガーを使用し、同期 HTTPS エンドポイントをネイティブで公開できます。 この機能があれば、他のロジック アプリから自分のロジック アプリを呼び出し、呼び出し可能エンドポイントのパターンを作成できます。 入ってくる呼び出しを処理するための呼び出し可能エンドポイントを設定するには、次のいずれかのトリガー タイプを使用できます。

この記事では、Request トリガーを使用してロジック アプリで呼び出し可能エンドポイントを作成し、別のロジック アプリからそのエンドポイントを呼び出す方法について説明します。 原則はすべて、入ってくる要求を受け取るための他のトリガー タイプに同じように適用されます。

トランスポート層セキュリティ (TLS) (以前の Secure Sockets Layer (SSL))、Azure Active Directory Open Authentication (Azure AD OAuth)、Azure API Management によるロジック アプリの公開、または受信呼び出しを発信する IP アドレスの制限などの、ロジック アプリへの受信呼び出しのセキュリティ、認可、および暗号化の詳細については、アクセスとデータのセキュリティ保護に関するページの「要求ベースのトリガーへの受信呼び出しへのアクセス」を参照してください。

前提条件

呼び出し可能なエンドポイントを作成する

  1. Azure portal にサインインします。 ワークフロー デザイナーで空のロジック アプリ ワークフローを作成して開きます。

  2. 検索ボックスで、 [組み込み] を選択します。 検索ボックスに、フィルターとして「request」と入力します。 トリガーの一覧から、 [HTTP 要求の受信時] を選択します。

    要求トリガーを見つけて選択する

  3. 必要に応じて、 [要求本文の JSON スキーマ] ボックスで、トリガーで受信することが予測されるペイロードまたはデータが記述された JSON スキーマを入力できます。

    デザイナーは、このスキーマを使用して、トリガー出力を表すトークンを生成します。 その後は、これらの出力をロジック アプリのワークフロー全体で容易に参照できます。 詳細については、JSON スキーマから生成されるトークンに関するセクションを参照してください。

    この例では、次のスキーマを入力します。

       {
       "type": "object",
       "properties": {
          "address": {
             "type": "object",
             "properties": {
                "streetNumber": {
                   "type": "string"
                },
                "streetName": {
                   "type": "string"
                },
                "town": {
                   "type": "string"
                },
                "postalCode": {
                   "type": "string"
                }
             }
          }
       }
    }
    

    要求アクションのための JSON スキーマを指定する

    または、サンプル ペイロードを指定することによって JSON スキーマを生成できます。

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

    2. [サンプルの JSON ペイロードを入力するか、貼り付けます] ボックスで、サンプル ペイロードを入力します。たとえば、次のようにします。

      {
         "address": {
            "streetNumber": "00000",
            "streetName": "AnyStreet",
            "town": "AnyTown",
            "postalCode": "11111-1111"
        }
      }
      
    3. 準備ができたら、 [完了] を選択します。

      [要求本文の JSON スキーマ] ボックスに、生成されたスキーマが表示されます。

  4. ロジック アプリを保存します。

    [HTTP POST の URL] ボックスに、他のサービスがロジック アプリの呼び出しやトリガーに使用できる生成されたコールバック URL が表示されます。 この URL には、認証に使用される Shared Access Signature (SAS) キーを指定するクエリ パラメーターが含まれています。

    エンドポイント用に生成されたコールバック URL

  5. コールバック URL をコピーするには、次のオプションがあります。

    • [HTTP POST の URL] ボックスの右で [URL のコピー] (ファイル コピー アイコン) を選択します。

    • この呼び出しは、要求トリガーが想定するメソッドを使用して行います。 この例では、POST メソッドを使用します。

      POST https://management.azure.com/{logic-app-resource-ID}/triggers/{endpoint-trigger-name}/listCallbackURL?api-version=2016-06-01

    • ロジック アプリの [概要] ペインからコールバック URL をコピーします。

      1. ロジック アプリのメニューで、 [概要] を選択します。

      2. [概要] ウィンドウで、[トリガーの履歴] を選択します。 [Callback url [POST]] (コールバック URL [POST]) で、URL をコピーします。

        [トリガー履歴] が選択されたロジック アプリの [概要] ウィンドウを示すスクリーンショット。

待機する要求メソッドの選択

既定では、要求トリガーは POST 要求を待機します。 呼び出し元が使用する必要のある別のメソッドを指定できますが、指定できるメソッドは 1 つだけです。

  1. 要求トリガーで、 [新しいパラメーターの追加] 一覧を開き、 [メソッド] を選択します。それにより、トリガーにこのプロパティが追加されます。

    トリガーに [メソッド] プロパティを追加する

  2. [メソッド] 一覧から、代わりにトリガーで待機する別のメソッドを選択します。 または、カスタム メソッドを指定できます。

    たとえば、後でエンドポイントの URL をテストできるように [GET] メソッドを選択します。

    トリガーで待機する要求メソッドを選択する

エンドポイント URL を使用してパラメーターを渡す

エンドポイントの URL 経由でパラメーター値を受け取るとき、次の選択肢が与えられます。

  • GET パラメーター経由で値を受け取るか、URL パラメーター経由で値を受け取ります。

    これらの値は、エンドポイントの URL で名前と値のペアとして渡されます。 このオプションでは、要求トリガーで GET メソッドを使用する必要があります。 後続のアクションでは、式で triggerOutputs() 関数を使用することで、パラメーター値をトリガー出力として取得できます。

  • 要求トリガーのパラメーターに対して相対パス経由で値を受け取ります

    これらの値は、エンドポイントの URL で相対パスから渡されます。 また、明示的に、トリガーで待機するメソッドを選択する必要があります。 後続のアクションでは、これらの出力を直接参照することで、パラメーター値をトリガー出力として取得できます。

GET パラメーター経由で値を受け取る

  1. 要求トリガーで、 [新しいパラメーターの追加] 一覧を開き、 [メソッド] プロパティをトリガーに追加し、GET メソッドを選択します。

    詳細については、「待機する要求メソッドの選択」を参照してください。

  2. 要求トリガーの下で、パラメーター値を使用するアクションを追加します。 この例では、 [応答] アクションを追加します。

    1. 要求トリガーで、 [新しいステップ]>[アクションの追加] の順に選択します。

    2. [アクションを選択してください] の下の検索ボックス内に、フィルターとして「response」と入力します。 アクションの一覧から、 [応答] アクションを選択します。

  3. パラメーター値を取得する triggerOutputs() 式を作成するには、次の手順を実行します。

    1. [応答] アクションの Body プロパティ内をクリックして動的コンテンツの一覧を表示し、 [式] を選択します。

    2. [式] ボックスにこの式を入力します。式の parameter-name は、自分のパラメーターの名前に変更します。 [OK] を選択します。

      triggerOutputs()['queries']['parameter-name']

      トリガーする

      Body プロパティでは、式が triggerOutputs() トークンに解決されます。

      解決された

      ロジック アプリを保存し、デザイナーから抜け、デザイナーに戻ると、たとえば次のように、指定したパラメーター名がトークンに表示されます。

      パラメーター名に対する解決された式

      コード ビューでは、Body プロパティが [応答] アクションの定義に次のように表示されます。

      "body": "@{triggerOutputs()['queries']['parameter-name']}",

      たとえば、postalCode という名前のパラメーターに値を渡すとします。 Body プロパティでは、文字列、Postal Code: と末尾のスペース、それに続く対応する式が指定されます。

      トリガーする例

  4. 呼び出し可能なエンドポイントをテストするには、要求トリガーからコールバック URL をコピーし、その URL を別のブラウザー ウィンドウに貼り付けます。 URL で、次の形式の URL の疑問符 (?) の後ろにパラメーターの名前と値を追加し、Enter キーを押します。

    ...?{parameter-name=parameter-value}&api-version=2016-10-01...

    https://prod-07.westus.logic.azure.com:433/workflows/{logic-app-resource-ID}/triggers/manual/paths/invoke?{parameter-name=parameter-value}&api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig={shared-access-signature}

    ブラウザーから応答が返され、Postal Code: 123456 というテキストが表示されます。

    コールバック URL に要求を送信したときの応答

  5. URL 内の別の位置にパラメーターの名前と値を置くには、たとえば次のように、プレフィックスとして必ずアンパサンド (&) を使用します。

    ...?api-version=2016-10-01&{parameter-name=parameter-value}&...

    次の例のコールバック URL では、サンプル パラメーターの名前と値 postalCode=123456 が URL 内の別の位置にあります。

    • 1 つ目の位置: https://prod-07.westus.logic.azure.com:433/workflows/{logic-app-resource-ID}/triggers/manual/paths/invoke?postalCode=123456&api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig={shared-access-signature}

    • 2 つ目の位置: https://prod-07.westus.logic.azure.com:433/workflows/{logic-app-resource-ID}/triggers/manual/paths/invoke?api-version=2016-10-01&postalCode=123456&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig={shared-access-signature}

注意

ハッシュまたはシャープ記号 ( # ) を URI に含める場合、エンコードされたバージョン %25%23 を代わりに使用します。

相対パス経由で値を受け取る

  1. 要求トリガーで、 [新しいパラメーターの追加] 一覧を開き、 [相対パス] を選択します。それにより、トリガーにこのプロパティが追加されます。

    トリガーに [相対パス] プロパティを追加する

  2. [相対パス] プロパティで、URL で受け入れるようにする JSON スキーマ内のパラメーターの相対パス (/address/{postalCode} など) を指定します。

    パラメーターの相対パスを指定する

  3. 要求トリガーの下で、パラメーター値を使用するアクションを追加します。 この例では、 [応答] アクションを追加します。

    1. 要求トリガーで、 [新しいステップ]>[アクションの追加] の順に選択します。

    2. [アクションを選択してください] の下の検索ボックス内に、フィルターとして「response」と入力します。 アクションの一覧から、 [応答] アクションを選択します。

  4. 応答アクションの [本文] プロパティで、トリガーの相対パスで指定したパラメーターを表すトークンを含めます。

    たとえば、応答アクションで Postal Code: {postalCode} を返すようにするとします。

    1. [本文] プロパティで、Postal Code: を末尾にスペースを付けて入力します。 動的コンテンツの一覧が開いたままでいるように、編集ボックスの中にカーソルを置いたままにします。

    2. 動的コンテンツの一覧で、 [HTTP 要求の受信時] セクションから postalCode トークンを選択します。

      応答本文に指定したパラメーターを追加する

      [本文] プロパティに、選択されたパラメーターが含まれています。

      パラメーターを含む応答本文の例

  5. ロジック アプリを保存します。

    要求トリガーでコールバック URL が更新され、たとえば次のように、相対パスが含まれます。

    https://prod-07.westus.logic.azure.com/workflows/{logic-app-resource-ID}/triggers/manual/paths/invoke/address/{postalCode}?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig={shared-access-signature}

  6. 呼び出し可能なエンドポイントをテストするには、要求トリガーから更新後のコールバック URL をコピーし、その URL を別のブラウザー ウィンドウに貼り付け、URL の {postalCode}123456 に変更し、Enter キーを押します。

    ブラウザーから応答が返され、Postal Code: 123456 というテキストが表示されます。

    コールバック URL に要求を送信したときの応答

注意

ハッシュまたはシャープ記号 ( # ) を URI に含める場合、エンコードされたバージョン %25%23 を代わりに使用します。

エンドポイント URL 経由でロジック アプリを呼び出す

エンドポイントを作成したら、そのエンドポイントの完全な URL に HTTPS 要求を送信することによってロジック アプリをトリガーできます。 ロジック アプリでは、直接アクセス エンドポイントの組み込みがサポートされています。

スキーマから生成されるトークン

要求トリガーで JSON スキーマを指定すると、ワークフロー デザイナーでは、そのスキーマ内のプロパティ用のトークンが生成されます。 これらのトークンは、ロジック アプリのワークフローを介してデータを渡すために使用できます。

たとえば、JSON スキーマにさらに多くのプロパティ ("suite" など) を追加した場合は、それらのプロパティ用のトークンをロジック アプリの後の手順で使用できます。 完全な JSON スキーマを次に示します。

   {
   "type": "object",
   "properties": {
      "address": {
         "type": "object",
         "properties": {
            "streetNumber": {
               "type": "string"
            },
            "streetName": {
               "type": "string"
            },
            "suite": {
               "type": "string"
            },
            "town": {
               "type": "string"
            },
            "postalCode": {
               "type": "string"
            }
         }
      }
   }
}

入れ子になったロジック アプリを作成する

要求を受信できる他のロジック アプリを追加することで、ロジック アプリにワークフローを入れ子にできます。 これらのロジック アプリを含めるには、次の手順に従います。

  1. 別のロジック アプリを呼び出すステップで、 [新しいステップ]>[アクションの追加] の順に選択します。

  2. [アクションを選択してください][Built-in](組み込み) を選択します。 検索ボックスに、フィルターとして「logic apps」と入力します。 アクションの一覧から、 [Logic Apps ワークフローを選択する] を選択します。

    ロジック アプリを現在のロジック アプリの内部で入れ子にする

    デザイナーには、選択の対象として有効なロジック アプリが表示されます。

  3. 現在のロジック アプリから呼び出すロジック アプリを選択します。

    現在のロジック アプリから呼び出すロジック アプリを選択する

受信要求からコンテンツを参照する

受信要求のコンテンツの種類が application/json である場合は、受信要求内のプロパティを参照できます。 そうでない場合、このコンテンツは、他の API に渡すことができる 1 つのバイナリ ユニットとして扱われます。 このコンテンツをロジック アプリのワークフローの内部で参照するには、まず、そのコンテンツを変換する必要があります。

たとえば、application/xml の種類を持つコンテンツを渡す場合は、@xpath()を使用して XPath 抽出を実行するか、または @json()を使用して XML を JSON に変換することができます。 詳細については、サポートされているコンテンツの種類を参照してください。

受信要求から出力を取得するには、@triggerOutputsを使用できます。 たとえば、次の例のような出力があるとします。

{
   "headers": {
      "content-type" : "application/json"
   },
   "body": {
      "myProperty" : "property value"
   }
}

明確に body プロパティにアクセスするには、@triggerBody()をショートカットとして使用できます。

要求に応答する

ロジック アプリをトリガーする特定の要求に、呼び出し元にコンテンツを返すことによって応答したい場合があります。 応答の状態コード、ヘッダー、および本文を構築するには、応答アクションを使用します。 このアクションは、ワークフローの最後のみでなく、ロジック アプリの任意の場所に使用できます。 ロジック アプリに応答アクションが含まれていない場合、エンドポイントは 202 Accepted 状態で直ちに応答します。

元の呼び出し元が応答を正常に取得するには、トリガーされたロジック アプリが入れ子になったロジック アプリとして呼び出されていない限り、応答のためにすべての必要な手順が要求タイムアウト制限内に完了する必要があります。 この制限内に応答が返されない場合、受信要求はタイムアウトし、408 Client timeout 応答を受信します。

入れ子になったロジック アプリの場合は、必要な時間の長さには関係なく、親ロジック アプリが引き続きすべての手順が完了するまで応答を待ちます。

応答を作成する

応答本文には、複数のヘッダーと任意の種類のコンテンツを含めることができます。 たとえば、次の応答のヘッダーは、このトピックで要求トリガーについて先に説明した JSON スキーマに基づいて、この応答のコンテンツの種類が application/json であり、本文に town および postalCode プロパティの値が含まれることを指定しています。

HTTPS 応答アクションの応答コンテンツを指定する

応答には、次のプロパティがあります。

プロパティ (表示) プロパティ (JSON) 説明
状態コード statusCode 受信要求への応答で使用する HTTPS 状態コード。 2xx、4xx、または 5xx で始まる任意の有効な状態コードを使用できます。 ただし、3xx 状態コードは指定できません。
ヘッダー headers 応答に含める 1 つ以上のヘッダー
本文 body 文字列、JSON オブジェクト、場合によっては前のステップから参照されるバイナリ コンテンツから成る本文オブジェクト

応答アクションの JSON 定義とロジック アプリの完全な JSON 定義を表示するには、ロジック アプリ デザイナーのツールバーで、 [コード ビュー] を選択します。

"Response": {
   "type": "Response",
   "kind": "http",
   "inputs": {
      "body": {
         "postalCode": "@triggerBody()?['address']?['postalCode']",
         "town": "@triggerBody()?['address']?['town']"
      },
      "headers": {
         "content-type": "application/json"
      },
      "statusCode": 200
   },
   "runAfter": {}
}

Q & A

Q:URL のセキュリティはどうなっていますか。

A: Azure では、Shared Access Signature (SAS) を使用してロジック アプリのコールバック URL を安全に生成します。 この署名はクエリ パラメーターとして渡され、ロジック アプリを実行する前に検証される必要があります。 Azure では、ロジック アプリごとの秘密キー、トリガー名、および実行される操作の一意の組み合わせを使用して署名が生成されます。 そのため、ロジック アプリの秘密キーにアクセスできなければ、有効な署名を生成することはできません。

重要

セキュリティの強化された運用環境のシステムでは、次の理由により、ブラウザーから直接ロジック アプリを呼び出さないことを強くお勧めします。

  • 共有アクセス キーが URL に表示されます。
  • Azure Logic Apps の顧客にまたがる共有ドメインのために、セキュリティ コンテンツ ポリシーを管理できません。

トランスポート層セキュリティ (TLS) (以前の Secure Sockets Layer (SSL))、Azure Active Directory Open Authentication (Azure AD OAuth)、Azure API Management によるロジック アプリの公開、または受信呼び出しを発信する IP アドレスの制限などの、ロジック アプリへの受信呼び出しのセキュリティ、認可、および暗号化の詳細については、アクセスとデータのセキュリティ保護に関するページの「要求ベースのトリガーへの受信呼び出しへのアクセス」を参照してください。

Q:呼び出し可能なエンドポイントをさらに構成することは可能でしょうか。

A: はい。HTTPS エンドポイントは、Azure API Management を通してより高度な構成をサポートしています。 このサービスでは、次のような、ロジック アプリを含むすべての API の一貫した管理、カスタム ドメイン名の設定、他の認証方法の使用などの機能も提供します。

次のステップ