次の方法で共有


Azure Logic Apps でワークフローから Azure 関数を呼び出す

適用対象: Azure Logic Apps (従量課金プラン + Standard)

ロジック アプリ ワークフローで特定のジョブを実行するコードを実行するには、完全なアプリまたはインフラストラクチャを構築する必要はありません。 代わりに、Azure 関数を作成して呼び出すことができます。 Azure Functions は、クラウドでのサーバーレス コンピューティングと、次のタスクを実行する機能を提供します。

  • Node.js または C# を使用して作成された関数を実行して、ワークフローの動作を拡張する。
  • ワークフローで計算を実行する。
  • ワークフローのフィールドに高度な書式設定や計算を適用する。

この攻略ガイドでは、従量課金または Standard ワークフローから既存の Azure 関数を呼び出す方法について説明します。 Azure Functions を使用しないでコードを実行するには、次のドキュメントを参照してください。

制限事項

  • マネージド ID と Microsoft Entra 認証を使用した Azure 関数の呼び出しの認証をサポートしているのは、従量課金ワークフローのみです。 Standard ワークフローは、現時点では関数呼び出しの認証を有効にする方法に関するセクションではサポートされていません。

  • Azure Logic Apps は、デプロイ スロットが有効な状態での Azure Functions の使用をサポートしません。 このシナリオがうまく機能する場合もありますが、その動作は予測不能で、ワークフローから Azure 関数を呼び出そうとしたときに承認の問題が生じるおそれがあります。

前提条件

  • Azure アカウントとサブスクリプション。 サブスクリプションをお持ちでない場合には、無料の Azure アカウントにサインアップしてください。

  • 1 つ以上の Azure 関数を含む Azure 関数アプリのリソース

    • 関数アプリのリソースとロジック アプリのリソースは、同じ Azure サブスクリプションを使用する必要があります。

    • 関数アプリのリソースでは、ランタイム スタックとして .NET または Node.js のいずれかを使用する必要があります。

    • 新しい関数を関数アプリに追加する場合、C# または JavaScript のいずれかを選択できます。

  • 呼び出す Azure 関数。 この関数は、次のツールを使用して作成できます。

    • Azure Portal

    • Visual Studio

    • Visual Studio Code

    • Azure CLI

    • Azure PowerShell

    • ARM テンプレート

    • 作成する関数では、HTTP トリガー テンプレートを使用する必要があります。

      HTTP トリガー テンプレートは、ロジック アプリのワークフローから application/json 型のコンテンツを受け入れることができます。 ワークフローに関数を追加すると、このテンプレートからお使いの Azure サブスクリプション内に作成されたカスタム関数がワークフロー デザイナーに表示されます。

    • 関数コードには、関数の完了後に返される応答とペイロードを含める必要があります。 context オブジェクトは、このガイドで後ほど説明する要求本文という名前の Azure Functions アクションを介してワークフローから送信されるメッセージを参照します。

      このガイドでは、FabrikamAzureFunction という名前の次のサンプル関数を使用します。

      module.exports = function (context, data) {
      
         var input = data;
      
         // Function processing logic
         // Function response for later use
         context.res = {
            body: {
              content:"Thank you for your feedback: " + input
            }
         };
         context.done();
      }
      

      関数の内部から context オブジェクトのプロパティにアクセスするには、次の構文を使用します。

      context.body.<property-name>

      たとえば、context オブジェクト内の content プロパティを参照するには、次の構文を使用します。

      context.body.content

      また、このコードには input 変数も含まれています。この変数には、data パラメーターからの値が格納され、関数でその値に対して操作を実行できるようにします。 JavaScript 関数内では、data 変数も context.body のショートカットです。

      Note

      この場合の body プロパティは context オブジェクトに適用され、アクションの出力内の Body トークンと同じではありません。このトークンは、関数にも渡すことができます。

    • 関数でカスタム ルートを使用するには、OpenAPI 定義を定義する必要があります。

      関数の OpenAPI 定義を定義している場合、関数パラメーターを操作するときに、ワークフロー デザイナーによって、より機能豊富なエクスペリエンスが提供されます。 OpenAPI 定義が定義された関数をワークフローで検出してアクセスできるようにするには、以下の手順に従って関数アプリを設定します。

  • 任意のトリガーで起動される従量課金または Standard ロジック アプリ ワークフロー。

    このガイドの例では、新着メールが届いたときという名前の Office 365 Outlook トリガーを使用します。

  • 別のワークフローを呼び出す Azure 関数を作成して呼び出すには、2 番目のワークフローが、呼び出し可能なエンドポイントを提供するトリガーで起動されることを確認します。

    たとえば、一般的な HTTP または 要求トリガーでワークフローを起動するか、またはサービスベースのトリガー (Azure QueuesEvent Grid など) を使用できます。 関数内で、トリガーの URL に HTTP POST 要求を送信し、2 番目のワークフローで処理するペイロードを含めます。 詳細については、ロジック アプリ ワークフローの呼び出し、トリガー、入れ子に関するページを参照してください。

Azure 関数の操作に関するヒント

OpenAPI 定義を使用する関数を検索する

ワークフローで OpenAPI 定義を使用する関数を検出して使用できるように関数アプリを設定するには、次の手順を実行します。

  1. Azure portal で、関数アプリを開きます。 関数アプリがアクティブに実行されていることを確認します。

  2. 次の手順に従って、関数アプリでクロスオリジン リソース共有 (CORS) を設定して、すべてのオリジンが許可されるようにします。

    1. 関数アプリのメニューで、[API] の下にある [CORS] を選択します。

    2. [許可されるオリジン] でワイルドカード文字のアスタリスク (*) を追加し、リスト内の他のすべてのオリジンは削除して、[保存] を選択します。

      スクリーンショットは、Azure portal、[CORS] ペイン、ワイルドカード文字 * が入力された [許可されるオリジン] を示しています。

HTTP 要求の内部でプロパティ値にアクセスする

Webhook ベースの関数は、入力として HTTP 要求を受け取り、それらの要求を他の関数に渡すことができます。 たとえば、Azure Logic Apps には DateTime 値を変換する関数がありますが、この基本的なサンプル JavaScript 関数は、関数に渡される HTTP 要求オブジェクト内のプロパティにアクセスし、そのプロパティ値に対して操作を実行する方法を示しています。 オブジェクト内のプロパティにアクセスするために、この例ではドット (.) 演算子を使用しています。

function convertToDateString(request, response){
   var data = request.body;
   response = {
      body: data.date.ToDateString();
   }
}

この関数の内部で何が起きるかを、次に示します。

  1. この関数は data 変数を作成し、request オブジェクト内の body オブジェクトをその変数に割り当てます。 この関数では、ドット (.) 演算子を使用して、request オブジェクト内の body オブジェクトを参照します。

    var data = request.body;
    
  2. これで、この関数は data 変数を介して date プロパティにアクセスし、ToDateString() 関数を呼び出して、そのプロパティ値を DateTime 型から DateString 型に変換することができます。 関数は、関数の応答の body プロパティを介して、結果も返します。

    body: data.date.ToDateString();
    

Azure で関数を作成した後、次の手順に従って、Azure 関数をワークフローに追加します。

URI パラメーターを関数に渡す

URI パラメーターを関数に渡す必要がある場合は、関数のエンドポイント URL でクエリ パラメーターを使用できます。

  1. ロジック アプリのワークフロー デザイナーを開き、関数の情報ペインを開いた状態で、[高度なパラメーター] 一覧から [クエリ] を選択します。

    テーブルが表示され、パラメーターの入力値をキーと値のペアとして入力できます。

  2. パラメーターのキーと値のペアを入力します。次に例を示します。

    [クエリ] パラメーターとキーと値の入力例を含む関数の情報ペインを示すスクリーンショット。

関数をワークフローに追加する (従量課金ワークフローと Standard ワークフロー)

ワークフローから Azure 関数を呼び出すには、他のアクションと同様に、デザイナーでその関数を追加できます。

  1. Azure portal で、従量課金ロジック アプリのワークフローをデザイナーで開きます。

  2. デザイナーで、次の一般的な手順に従い、[Azure 関数を選択する] という名前の Azure Functions アクションを追加します。

  3. [アクションの追加] ペインで、次の手順を実行します。

    1. 関数アプリの一覧から関数アプリを選択し、関数を選択してから、[アクションの追加] を選択します。次に例を示します。

      スクリーンショットは、関数アプリと関数が選択された従量課金ワークフローを示しています。

  4. 関数の情報ボックスが表示されたら、次の手順を実行します。

    1. [要求本文] には、関数の入力を指定します。これには、JavaScript Object Notation (JSON) オブジェクトの形式を使用する必要があります。次に例を示します。

      {"context": <selected-input> }

      この入力は、ワークフローから関数に送信される "コンテキスト オブジェクト" ペイロードまたはメッセージです。

      • 前の手順の出力を表すトークンを選択するには、[要求本文] ボックスを選択し、動的コンテンツ リストを開くオプション (稲妻アイコン) を選択します。

      • 式を作成するには、[要求本文] ボックス内を選択し、式エディターを開くオプション (数式アイコン) を選択します。

      次の例では、content 属性を持つ JSON オブジェクトと、メール トリガーの [差出人] 出力を表すトークンを [要求本文] の値として指定しています。

      スクリーンショットは、従量課金ワークフローと、コンテキスト オブジェクト ペイロードの要求本文の例を含む関数を示しています。

      ここで、コンテキスト オブジェクトは文字列としてキャストされないため、オブジェクトのコンテンツは JSON ペイロードに直接追加されます。 完全な例を次に示します。

      スクリーンショットは、従量課金ワークフローと、コンテキスト オブジェクト ペイロードの完全な要求本文の例を含む関数を示しています。

      文字列、JSON オブジェクト、または JSON 配列を渡す JSON トークン以外のコンテキスト オブジェクトを指定すると、エラーが発生します。 ただし、トークンを引用符 ("") で囲むと、コンテキスト オブジェクトを文字列としてキャストできます。たとえば、受信時刻トークンを使用する場合、次のように指定します。

      スクリーンショットは、従量課金ワークフローと、コンテキスト オブジェクトを文字列としてキャストする要求本文の例を示しています。

    2. 使用するメソッド、要求ヘッダー、クエリ パラメーター、認証などのその他の詳細を指定するには、[詳細パラメーター] の一覧を開き、目的のパラメーターを選択します。 認証については、選択した関数によってオプションが異なります。 詳細については、「関数の認証を有効にする」を参照してください。

Azure 関数呼び出しの認証を有効にする (従量課金ワークフローのみ)

従量課金ワークフローでは、マネージド ID を使用して、Azure 関数呼び出しを認証し、Microsoft Entra ID で保護されているリソースにアクセスできます。 このマネージド ID を使用すると、サインインして、資格情報やシークレットを提供しなくても、アクセスを認証できます。 この ID は、ユーザーの代わりに Azure で管理されます。ユーザーがシークレットを提供したりローテーションしたりする必要がないため、資格情報の保護に役立ちます。 システムによって割り当てられる ID か、ユーザーが割り当てる手動作成 ID を、ロジック アプリのリソース レベルで設定できます。 ワークフローから呼び出される Azure 関数で、同じマネージド ID を認証に使用できます。

Note

マネージド ID と Microsoft Entra 認証を使用した Azure 関数呼び出しの認証をサポートしているのは、従量課金ワークフローのみです。 現在、Azure 関数を呼び出すアクションを使用する場合、Standard ワークフローにはこのサポートは含まれていません。

詳しくは、次のドキュメントをご覧ください。

従量課金ロジック アプリのマネージド ID を使用できるように関数アプリと関数を設定するには、次の大まかな手順に従います。

  1. ロジック アプリのマネージド ID を有効にして設定します

  2. 匿名認証用に関数を設定します

  3. Microsoft Entra 認証を設定するために必要な値を調べます

  4. 関数アプリのアプリ登録を作成します

匿名認証用に関数を設定する (従量課金ワークフローのみ)

従量課金ロジック アプリのマネージド ID を関数で使用するには、関数の認証レベルを anonymous に設定する必要があります。 設定していないと、ワークフローで BadRequest エラーがスローされます。

  1. Azure portal で、お使いの関数アプリを探して選択します。

    次の手順では、FabrikamFunctionApp という名前の関数アプリの例を使用します。

  2. 関数アプリのリソース メニューの [開発ツール] で、[高度なツール]>[Go] を選択します。

    スクリーンショットは、[高度なツール] と [適用] のオプションが選択されている関数アプリ メニューを示しています。

  3. [Kudu Plus] ページが開いたら、Kudu Web サイトのタイトル バーで、[デバッグ コンソール] メニューから [CMD] を選択します。

    スクリーンショットは、[デバッグ コンソール] メニューが開き、[CMD] という名前のオプションが選択されている Kudu Services ページを示しています。

  4. 次のページが表示されたら、フォルダーの一覧から [site]>[wwwroot]><自分の関数> の順に選択します。

    次の手順では、FabrikamAzureFunction という名前の関数の例を使用します。

    スクリーンショットは、site、wwwroot、関数の各フォルダーが開かれているフォルダーの一覧を示しています。

  5. 編集のために function.json ファイルを開きます。

    スクリーンショットは、編集コマンドが選択された function.json ファイルを示しています。

  6. bindings オブジェクトで、authLevel プロパティが存在するかどうかを確認します。 プロパティが存在する場合、プロパティの値を anonymous に設定します。 存在しない場合、そのプロパティを追加し、値を設定します。

    スクリーンショットは、authLevel プロパティが anonymous に設定された bindings オブジェクトを示しています。

  7. 完了したら、設定を保存します。 次のセクションに進みます。

Microsoft Entra 認証を設定するために必要な値を調べる (従量課金ワークフローのみ)

マネージド ID と Microsoft Entra 認証を使用するように関数アプリを設定する前に、このセクションの手順に従って、次の値を見つけて保存する必要があります。

  1. Microsoft Entra ID のテナント ID を見つけます

  2. マネージド ID のオブジェクト ID を見つけます

  3. マネージド ID に関連付けられているエンタープライズ アプリケーションのアプリケーション ID を見つけます

Microsoft Entra ID のテナント ID を見つける

Get-AzureAccount という名前の PowerShell コマンドを実行するか、Azure portal で次の手順に従います。

  1. Azure portal で Microsoft Entra テナントを開きます。

    このガイドではサンプル テナントとして Fabrikam を使用します。

  2. テナント メニューで、[概要] を選択します。

  3. 後で使用するためにテナント ID をコピーして保存します。次に例を示します。

    スクリーンショットは、テナント ID のコピー ボタンが選択されている Microsoft Entra ID の [プロパティ] ペインを示しています。

マネージド ID のオブジェクト ID を見つける

従量課金ロジック アプリ リソースのマネージド ID を有効にした後、マネージド ID のオブジェクトを見つけます。 この ID を使用して、Microsoft Entra テナント内で関連付けられたエンタープライズ アプリケーションを見つけます。

  1. ロジック アプリ メニューで、[設定] の下にある [ID] を選択し、[システム割り当て] または [ユーザー割り当て] のいずれかを選択します。

    • システム割り当て

      ID の [オブジェクト (プリンシパル) ID] をコピーします。

      スクリーンショットは、[システム割り当て] という名前のタブが選択されている従量課金ロジック アプリの [ID] ページを示しています。

    • ユーザー割り当て済み

      1. ID を選択します。

        スクリーンショットは、[ユーザー割り当て] という名前のタブが選択されている従量課金ロジック アプリの [ID] ページを示しています。

      2. ID の [オブジェクト (プリンシパル) ID] をコピーします。

        スクリーンショットは、[オブジェクト (プリンシパル) ID] が選択されている従量課金ロジック アプリの [概要] ページを示しています。

マネージド ID に関連付けられている Azure エンタープライズ アプリケーションのアプリケーション ID を見つける

ロジック アプリ リソースでマネージド ID を有効にすると、Azure によって、同じ名前を持つAzure エンタープライズ アプリケーションが自動的に作成されて関連付けられます。 次に、関連付けられているエンタープライズ アプリケーションを見つけて、その[アプリケーション ID] をコピーする必要があります。 後で、このアプリケーション ID を使用して、アプリ登録を作成し、関数アプリの ID プロバイダーを追加します。

  1. Azure portal で、Microsoft Entra テナントを見つけて開きます。

  2. テナント メニューで、[管理] の下にある [エンタープライズ アプリケーション] を選択します。

  3. [すべてのアプリケーション] ページの検索ボックスに、マネージド ID のオブジェクト ID を入力します。 結果から、一致するエンタープライズ アプリケーションを見つけて、その [アプリケーション ID] をコピーします。

    スクリーンショットは、検索ボックスにエンタープライズ アプリケーションのオブジェクト ID が入力され、一致するアプリケーション ID が選択されている、[すべてのアプリケーション] という名前の Microsoft Entra テナント ページを示しています。

  4. 次に、コピーしたアプリケーション ID を使用して、ID プロバイダーを関数アプリに追加します。

関数アプリの ID プロバイダーを追加する (従量課金ワークフローのみ)

テナント ID とアプリケーション ID が確定したので、ID プロバイダーを追加し、アプリ登録を作成して、Microsoft Entra 認証を使用するように関数アプリを設定することができます。

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

  2. 関数アプリ メニューの [設定] で、[認証] を選択し、[ID プロバイダーの追加] を選択します。

    スクリーンショットは、[認証] ページと [ID プロバイダーの追加] という名前のオプションが選択されている関数アプリ メニューを示しています。

  3. [ID プロバイダーの追加] ペインの [基本] で、[ID プロバイダー] の一覧から [Microsoft] を選択します。

  4. [アプリの登録][アプリの登録の種類] で、[既存アプリの登録の詳細を提供します] を選択し、以前に保存した値を入力します。

    プロパティ 必要 説明
    アプリケーション (クライアント) ID はい <application-ID> このアプリの登録に使用する一意の識別子。 この例では、マネージド ID に関連付けられているエンタープライズ アプリケーションのコピーしたアプリケーション ID を使用します。
    クライアント シークレット 省略可能ですが、指定することをお勧めします。 <client-secret> トークンを要求するときにアプリがその身元を証明するために使用するシークレット値。 クライアント シークレットが作成され、MICROSOFT_PROVIDER_AUTHENTICATION_SECRET という名前のスロット固定アプリケーション設定としてアプリの構成に格納されます。

    - シークレットを定期的にローテーションし、安全に格納していることを確認してください。 たとえば、承認されていないユーザーに値を公開することなく、マネージド ID を使用してキーを取得できる Azure Key Vault でシークレットを管理します。 この設定を、Key Vault 参照を使用するように更新できます。

    - クライアント シークレット値を指定した場合、サインイン操作ではハイブリッド フローが使用され、アクセス トークンと更新トークンの両方が返されます。

    - クライアント シークレットを指定しない場合、サインイン操作では OAuth 2.0 の暗黙的な許可フローが使用されます。 このメソッドは、ID トークンまたはアクセス トークンのみを直接返します。 これらのトークンはプロバイダーによって送信され、EasyAuth トークン ストアに格納されます。

    重要: セキュリティ上のリスクがあるため、暗黙的な許可のフローは、適切な認証方法ではなくなりました。 代わりに、Proof Key for Code Exchange (PKCE) を使用した認可コード フローか、シングルページ アプリケーション (SPA) 認証コードを使用してください。
    発行者の URL いいえ <authentication-endpoint-URL>/<Microsoft-Entra-tenant-ID>/v2.0 この URL は、ユーザーを正しい Microsoft Entra テナントにリダイレクトし、適切なトークン署名キーとトークン発行者クレームの値を特定するための適切なメタデータをダウンロードします。 Azure AD v1 を使用するアプリでは、URL から /v2.0 を省略します。

    このシナリオでは、次の URL を使用します: https://sts.windows.net/<Microsoft-Entra-tenant-ID>
    許可されるトークン対象ユーザー No <application-ID-URI> 関数アプリのアプリケーション ID URI (リソース ID)。 クラウドまたはサーバー アプリで Web アプリからの認証トークンを許可する場合、Web アプリのアプリケーション ID URI を追加します。 構成されたクライアント ID は、常に、許可された対象ユーザーであると暗黙的に見なされます。

    このシナリオでは、値は https://management.azure.com です。 後で、マネージド ID を使用するようにワークフローで関数アクションを設定するときに、Audience プロパティで同じ URI を使用できます。

    重要: アプリケーション ID の URI (リソース ID) は、必要な末尾のスラッシュも含めて、Microsoft Entra ID で求められる値と正確に一致する必要があります。

    この時点で、バージョンは次の例のようになります。

    スクリーンショットは、ロジック アプリのアプリ登録と関数アプリの ID プロバイダーを示しています。

    ID プロバイダーを使用して関数アプリを初めて設定する場合、[App Service の認証設定] セクションも表示されます。 これらのオプションは、認証されていない要求に対して関数アプリがどのように応答するかを決定します。 既定の選択では、新しい ID プロバイダーを使用してログインするために、すべての要求がリダイレクトされます。 [認証設定] の横にある [編集] を選択して、この動作を今すぐカスタマイズするか、後でメインの [認証] ページからこれらの設定を調整することができます。 これらのオプションの詳細については、認証フローにおける Azure App Service と Azure Functions での認証と認可に関するページを参照してください。

    それ以外の場合は、次の手順に進むことができます。

  5. アプリの登録の作成を完了するには、[追加] を選択します。

    完了すると、[認証] ページに、ID プロバイダーとアプリ登録のアプリケーション (クライアント) ID が一覧表示されるようになります。 関数アプリで、このアプリ登録を認証に使用できるようになりました。

  6. 後でワークフローの Azure Functions アクションの [対象ユーザー] プロパティで使用するために、アプリ登録の [アプリ (クライアント) ID] をコピーします。

    スクリーンショットは、関数アプリの新しい ID プロバイダーを示しています。

  7. デザイナーに戻り、組み込みの Azure Functions アクションを使用して、マネージド ID によってアクセスを認証するための手順に従います。

次のステップ