Azure Logic Apps から Azure 関数を呼び出すCall Azure functions from Azure Logic Apps

自分のロジック アプリで特定のジョブを実行するためのコードを実行する場合は、Azure Functions を使用して独自の関数を作成することができます。When you want to run code that performs a specific job in your logic apps, you can create your own function by using Azure Functions. このサービスを利用して Node.js、C#、および F# 関数を作成できるので、完全なアプリやコードを実行するためのインフラストラクチャを構築する必要はありません。This service helps you create Node.js, C#, and F# functions so you don't have to build a complete app or infrastructure to run code. また、Azure 関数内からロジック アプリを呼び出すこともできます。You can also call logic apps from inside Azure functions. Azure Functions は、クラウド内でサーバーレス コンピューティングを実現します。次のようなタスクを実行するために便利です。Azure Functions provides serverless computing in the cloud and is useful for performing tasks such as these examples:

  • Node.js または C# で、関数を使用してロジック アプリの動作を拡張します。Extend your logic app's behavior with functions in Node.js or C#.
  • ロジック アプリのワークフローで計算を実行します。Perform calculations in your logic app workflow.
  • ロジック アプリのフィールドで高度な書式設定や計算を行います。Apply advanced formatting or compute fields in your logic apps.

Azure の関数を作成せずにコード スニペットを実行するには、インライン コードを追加して実行する方法を参照してください。To run code snippets without creating Azure functions, learn how to add and run inline code.

注意

Logic Apps と Azure Functions の統合では、現在、スロットを有効にして機能させることはできません。Integration between Logic Apps and Azure Functions currently doesn't work with Slots enabled.

前提条件Prerequisites

  • Azure サブスクリプション。An Azure subscription. Azure サブスクリプションがない場合は、無料の Azure アカウントにサインアップしてください。If you don't have an Azure subscription, sign up for a free Azure account.

  • Azure 関数のコンテナーである Azure 関数アプリと Azure 関数。An Azure function app, which is a container for Azure functions, along with your Azure function. 関数アプリを持っていない場合は、まず関数アプリを作成しますIf you don't have a function app, create your function app first. 次に、Azure portal でロジック アプリの外部で関数を作成するか、ロジック アプリ デザイナーでロジック アプリの内部から関数を作成することができます。You can then create your function either outside your logic app in the Azure portal, or from inside your logic app in the Logic App Designer.

  • ロジック アプリを操作するときは、既存であるか新規であるかに関係なく、同じ要件が関数アプリと関数に適用されます。When working with logic apps, the same requirements apply to function apps and functions whether they are existing or new:

    • 関数アプリとロジック アプリでは、同じ Azure サブスクリプションを使用する必要があります。Your function app and logic app must use the same Azure subscription.

    • 新しい関数アプリでは、ランタイム スタックとして .NET または JavaScript を使用する必要があります。New function apps must use either the .NET or JavaScript as the runtime stack. 既存の関数アプリに新しい関数を追加する場合は、C# または JavaScript のいずれかを選択できます。When you add a new function to existing function apps, you can select either C# or JavaScript.

    • 自分の関数では、HTTP トリガー テンプレートを使用します。Your function uses the HTTP trigger template.

      HTTP トリガー テンプレートは、ロジック アプリから application/json 型のコンテンツを受け入れることができます。The HTTP trigger template can accept content that has application/json type from your logic app. Azure 関数をロジック アプリに追加すると、このテンプレートからお使いの Azure サブスクリプション内に作成されたカスタム関数がロジック アプリ デザイナーに表示されます。When you add an Azure function to your logic app, the Logic App Designer shows custom functions that are created from this template within your Azure subscription.

    • OpenAPI 定義 (以前は Swagger ファイルとして知られていました) を定義済みでない限り、自分の関数でカスタム ルートが使用されることはありません。Your function doesn't use custom routes unless you've defined an OpenAPI definition (formerly known as a Swagger file).

    • 自分の関数に対して OpenAPI 定義を定義している場合、関数パラメーターを操作するときに、ロジック アプリ デザイナーによって豊富なエクスペリエンスが提供されます。If you have an OpenAPI definition for your function, the Logic Apps Designer gives you a richer experience when your work with function parameters. OpenAPI 定義を含む関数をロジック アプリが見つけてアクセスできるようにするには、以下の手順に従って関数アプリを設定します。Before your logic app can find and access functions that have OpenAPI definitions, set up your function app by following these steps.

  • ロジック アプリの最初の手順としてトリガーを含む、関数の追加先となるロジック アプリThe logic app where you want to add the function, including a trigger as the first step in your logic app

    関数を実行するアクションを追加する前に、自分のロジック アプリをトリガーで開始する必要があります。Before you can add actions that run functions, your logic app must start with a trigger. ロジック アプリを初めて使用する場合は、「Azure Logic Apps とは」とクイック スタートの初めてのロジック アプリの作成に関するページを参照してください。If you're new to logic apps, review What is Azure Logic Apps and Quickstart: Create your first logic app.

OpenAPI の記述がある関数を検索するFind functions that have OpenAPI descriptions

ロジック アプリ デザイナーで関数アプリを操作するときに豊富なエクスペリエンスを利用するには、自分の関数に対して、以前は Swagger ファイルとして知られていた OpenAPI 定義を生成します。For a richer experience when you work with function parameters in the Logic Apps Designer, generate an OpenAPI definition, formerly known as a Swagger file, for your function. お使いのロジック アプリで Swagger の記述を含む関数を検索して使用できるように、関数アプリを設定するために、次の手順を実行します。To set up your function app so your logic app can find and use functions that have Swagger descriptions, follow these steps:

  1. 自分の関数アプリがアクティブに実行されていることを確認します。Make sure that your function app is actively running.

  2. 自分の関数アプリで、次の手順に従ってクロスオリジン リソース共有 (CORS) を設定して、すべてのオリジンが許可されるようにします。In your function app, set up Cross-Origin Resource Sharing (CORS) so that all origins are permitted by following these steps:

    1. 関数アプリの一覧から、自分の関数アプリを選択します。From the Function Apps list, select your function app. 右側のウィンドウで、 [プラットフォーム機能] > [CORS] を選択します。In the right-hand pane, select Platform features > CORS.

      関数アプリ、[プラットフォーム機能]、[CORS] の順に選択する

    2. [CORS] でアスタリスク ( * ) ワイルドカード文字を追加しますが、リスト内の他のすべてのオリジンを削除し、 [保存] を選択します。Under CORS, add the asterisk (*) wildcard character, but remove all the other origins in the list, and choose Save.

      "CORS* にワイルドカード文字 "*" を設定します。

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

Webhook 関数は、入力として HTTP 要求を受け取り、それらの要求を他の関数に渡すことができます。Webhook functions can accept HTTP requests as inputs and pass those requests to other functions. たとえば、Logic Apps には DateTime 値を変換する関数がありますが、この基本的なサンプル JavaScript 関数は、関数に渡された要求オブジェクト内のプロパティにアクセスしてそのプロパティ値を操作する方法を示しています。For example, although Logic Apps has functions that convert DateTime values, this basic sample JavaScript function shows how you can access a property inside a request object that's passed to the function and perform operations on that property value. オブジェクト内のプロパティにアクセスするために、この例ではドット (.) 演算子を使用しています。To access properties inside objects, this example uses the dot (.) operator:

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

この関数の内部で何が起きるかを、次に示します。Here's what happens inside this function:

  1. 関数は data 変数を作成し、request オブジェクト内の body オブジェクトをその変数に割り当てます。The function creates a data variable and assigns the body object inside the request object to that variable. この関数はドット (.) 演算子を使用して、request オブジェクト内の body オブジェクトを参照します。The function uses the dot (.) operator to reference the body object inside the request object:

    var data = request.body;
    
  2. これで、この関数は data 変数を介して date プロパティにアクセスし、ToDateString() 関数を呼び出すことによってそのプロパティ値を DateTime 型から DateString 型に変換することができます。The function can now access the date property through the data variable, and convert that property value from DateTime type to DateString type by calling the ToDateString() function. 関数は、関数の応答の body プロパティを介して、結果も返します。The function also returns the result through the body property in the function's response:

    body: data.date.ToDateString();
    

Azure 関数を作成できたので、ロジック アプリに関数を追加する方法の手順に従ってください。Now that you've created your Azure function, follow the steps for how to add functions to logic apps.

ロジック アプリの内部で関数を作成するCreate functions inside logic apps

ロジック アプリ デザイナーを使用して、ロジック アプリ内から開始される Azure 関数を作成するには、まず Azure 関数アプリを用意する必要があります。このアプリが自分の関数のコンテナーになります。Before you can create an Azure function starting from inside your logic app by using the Logic App Designer, you must first have an Azure function app, which is a container for your functions. 関数アプリを持っていない場合は、まず関数アプリを作成します。If you don't have a function app, create that function app first. Azure Portal で初めての関数を作成する」を参照してください。See Create your first function in the Azure portal.

  1. Azure portal のロジック アプリ デザイナーでロジック アプリを開きます。In the Azure portal, open your logic app in the Logic App Designer.

  2. 関数を作成して追加するには、自身のシナリオに適用されるステップに従います。To create and add your function, follow the step that applies to your scenario:

    • ロジック アプリのワークフローの最後のステップで、 [新しいステップ] を選択します。Under the last step in your logic app's workflow, choose New step.

    • ロジック アプリのワークフローの既存のステップ間で、矢印の上にマウスを移動して、プラス (+) 記号を選択し、 [アクションの追加] を選択します。Between existing steps in your logic app's workflow, move your mouse over the arrow, choose the plus (+) sign, and then select Add an action.

  3. 検索ボックスで、フィルターとして「azure functions」と入力します。In the search box, enter "azure functions" as your filter. アクションの一覧から、次のアクションを選択します。 [Azure 関数を選択する - Azure Functions] アクションを選択します。From the actions list, select this action: Choose an Azure function - Azure Functions

    "Azure functions" を探す

  4. 関数アプリの一覧で、関数アプリを選択します。From the function apps list, select your function app. アクションの一覧が開いたら、次のアクションを選択します。Azure Functions - 新しい関数を作成するAfter the actions list opens, select this action: Azure Functions - Create New Function

    関数アプリを選択する

  5. 関数定義エディターで、関数を定義します。In the function definition editor, define your function:

    1. [関数名] ボックスで関数の名前を指定します。In the Function name box, provide a name for your function.

    2. [コード] ボックスで、自分のコードを関数テンプレートに追加します。関数の実行が終了した後でロジック アプリに返される応答とペイロードも含めます。In the Code box, add your code to the function template, including the response and payload that you want returned to your logic app after your function finishes running.

      関数を定義する

      テンプレートのコードでは、 context オブジェクトは、以降のステップでロジック アプリが Request Body フィールド経由で送信するメッセージを参照します。In the template's code, the context object refers to the message that your logic app sends through the Request Body field in a later step. 関数の内部から context オブジェクトのプロパティにアクセスするには、次の構文を使用します。To access the context object's properties from inside your function, use this syntax:

      context.body.<property-name>

      たとえば、context オブジェクト内の content プロパティを参照するには、次の構文を使用します。For example, to reference the content property inside the context object, use this syntax:

      context.body.content

      また、テンプレート コードには、input 変数が含まれます。この変数は、お使いの関数が該当の値に対する操作を実行できるように、data パラメーターからの値を格納します。The template code also includes an input variable, which stores the value from the data parameter so your function can perform operations on that value. また、JavaScript 関数の中で、data 変数は context.body のショートカットです。Inside JavaScript functions, the data variable is also a shortcut for context.body.

      注意

      この場合の body プロパティは context オブジェクトに適用され、アクションの出力からの Body トークンと同じではありません。お使いの関数にも渡すことができます。The body property here applies to the context object and isn't the same as the Body token from an action's output, which you might also pass to your function.

    3. 操作が完了したら、 [作成] を選択します。When you're done, choose Create.

  6. [要求本文] ボックスで、関数の入力を指定します。書式は JavaScript Object Notation (JSON) オブジェクトにする必要があります。In the Request Body box, provide your function's input, which must be formatted as a JavaScript Object Notation (JSON) object.

    この入力は、ロジック アプリが関数に送信するコンテキスト オブジェクトまたはメッセージです。This input is the context object or message that your logic app sends to your function. [要求本文] フィールドをクリックすると、動的コンテンツの一覧が表示され、前のステップからの出力のトークンを選択できます。When you click in the Request Body field, the dynamic content list appears so you can select tokens for outputs from previous steps. この例では、コンテキスト ペイロードが、電子メール トリガーからの From トークンの値を保持する content という名前のプロパティを含んでいることを示しています。This example specifies that the context payload contains a property named content that has the From token's value from the email trigger:

    [要求本文] の例 - コンテキスト オブジェクトのペイロード

    ここで、コンテキスト オブジェクトは文字列としてキャストされないため、オブジェクトのコンテンツは JSON ペイロードに直接追加されます。Here, the context object isn't cast as a string, so the object's content gets added directly to the JSON payload. ただし、コンテキスト オブジェクトが文字列、JSON オブジェクト、または JSON 配列を渡す JSON トークンでない場合は、エラーが発生します。However, when the context object isn't a JSON token that passes a string, a JSON object, or a JSON array, you get an error. そのため、この例で代わりに Received Time トークンを使用した場合は、二重引用符を追加することで、コンテキスト オブジェクトを文字列としてキャストできます。So, if this example used the Received Time token instead, you can cast the context object as a string by adding double-quotation marks:

    オブジェクトを文字列としてキャストする

  7. 使用するメソッド、要求ヘッダー、クエリ パラメーターなどのその他の詳細を指定するには、 [新しいパラメーターの追加] の一覧を開き、目的のオプションを選択します。To specify other details such as the method to use, request headers, or query parameters, open the Add new parameter list, and select the options that you want.

ロジック アプリに既存の関数を追加するAdd existing functions to logic apps

ロジック アプリから既存の Azure 関数を呼び出すには、ロジック アプリ デザイナーで他のアクションと同様に Azure 関数を追加します。To call existing Azure functions from your logic apps, you can add Azure functions like any other action in the Logic App Designer.

  1. Azure portal のロジック アプリ デザイナーでロジック アプリを開きます。In the Azure portal, open your logic app in the Logic App Designer.

  2. 関数を追加するステップの下で、 [新しいステップ] を選択し、 [アクションの追加] を選択します。Under the step where you want to add the function, choose New step, and select Add an action.

  3. 検索ボックスで、フィルターとして「azure functions」と入力します。In the search box, enter "azure functions" as your filter. アクションの一覧から、次のアクションを選択します。 [Azure 関数を選択する - Azure Functions] アクションを選択します。From the actions list, select this action: Choose an Azure function - Azure Functions

    "Azure functions" を探す

  4. 関数アプリの一覧で、関数アプリを選択します。From the function apps list, select your function app. 関数の一覧が表示されたら、関数を選択します。After the functions list appears, select your function.

    関数アプリと Azure 関数を選択する

    API 定義 (Swagger 記述) を持ち、ロジック アプリが探してアクセスできるように設定された関数の場合は、 [Swagger アクション] を選択することができます。For functions that have API definitions (Swagger descriptions) and are set up so your logic app can find and access those functions, you can select Swagger actions:

    関数アプリ、[Swagger アクション]、および Azure 関数を選択する

  5. [要求本文] ボックスで、関数の入力を指定します。書式は JavaScript Object Notation (JSON) オブジェクトにする必要があります。In the Request Body box, provide your function's input, which must be formatted as a JavaScript Object Notation (JSON) object.

    この入力は、ロジック アプリが関数に送信するコンテキスト オブジェクトまたはメッセージです。This input is the context object or message that your logic app sends to your function. [要求本文] フィールドをクリックすると、動的コンテンツの一覧が表示され、前のステップからの出力のトークンを選択できます。When you click in the Request Body field, the dynamic content list appears so that you can select tokens for outputs from previous steps. この例では、コンテキスト ペイロードが、電子メール トリガーからの From トークンの値を保持する content という名前のプロパティを含んでいることを示しています。This example specifies that the context payload contains a property named content that has the From token's value from the email trigger:

    [要求本文] の例 - コンテキスト オブジェクトのペイロード

    ここで、コンテキスト オブジェクトは文字列としてキャストされないため、オブジェクトのコンテンツは JSON ペイロードに直接追加されます。Here, the context object isn't cast as a string, so the object's content gets added directly to the JSON payload. ただし、コンテキスト オブジェクトが文字列、JSON オブジェクト、または JSON 配列を渡す JSON トークンでない場合は、エラーが発生します。However, when the context object isn't a JSON token that passes a string, a JSON object, or a JSON array, you get an error. そのため、この例で代わりに Received Time トークンを使用した場合は、二重引用符を追加することで、コンテキスト オブジェクトを文字列としてキャストできます。So, if this example used the Received Time token instead, you can cast the context object as a string by adding double-quotation marks:

    オブジェクトを文字列としてキャストする

  6. 使用するメソッド、要求ヘッダー、クエリ パラメーターなどのその他の詳細を指定するには、 [新しいパラメーターの追加] の一覧を開き、目的のオプションを選択します。To specify other details such as the method to use, request headers, or query parameters, open the Add new parameter list, and select the options that you want.

Azure 関数からロジック アプリを呼び出すCall logic apps from Azure functions

Azure 関数の内部からロジック アプリをトリガーする場合、ロジック アプリは、呼び出し可能なエンドポイントを提供するトリガーから始まる必要があります。When you want to trigger a logic app from inside an Azure function, the logic app must start with a trigger that provides a callable endpoint. たとえば、HTTPRequestAzure Queues、または Event Grid トリガーでロジック アプリを開始できます。For example, you can start the logic app with the HTTP, Request, Azure Queues, or Event Grid trigger. 次に、関数の内部から、そのトリガーの URL に HTTP POST 要求を送信し、ロジック アプリで処理するペイロードを含めます。Inside your function, send an HTTP POST request to the trigger's URL, and include the payload you want that logic app to process. 詳細については、「ロジック アプリを呼び出し、トリガーし、入れ子にする」をご覧ください。For more information, see Call, trigger, or nest logic apps.

次の手順Next steps