トリガーとバインディングを作成する

完了

トリガーにより、関数が実行されます。 トリガーで関数の呼び出し方法が定義されます。1 つの関数には正確に 1 つのトリガーを含める必要があります。 トリガーにはデータが関連付けられていて、多くの場合、関数のペイロードとして提供されます。

関数へのバインドは、関数に別のリソースを宣言的に接続する方法です。バインドは入力バインド または出力バインド、あるいは両方として接続される場合があります。 バインドからのデータは、パラメーターとして関数に提供されます。

ニーズに合わせて、さまざまなバインドを組み合わせることができます。 バインドは省略可能であり、関数には 1 つまたは複数の入力または出力バインドがある場合があります。

トリガーとバインドによって、他のサービスへのアクセスのハードコーディングを回避することができます。 関数は、関数パラメーターでデータ (キュー メッセージの内容など) を受信します。 関数の戻り値を使用して、(たとえば、キュー メッセージを作成するために) データを送信します。

トリガーとバインドの定義

トリガーとバインドは、開発言語に応じて異なる方法で定義されます。

Language トリガーとバインドは、以下を行うことで構成されます
C# クラス ライブラリ C# 属性でのメソッドとパラメーターの修飾
Java Java 注釈でのメソッドとパラメーターの修飾
JavaScript/PowerShell/Python/TypeScript function.json スキーマの更新

function.json に依存する言語用に、ポータルの [統合] タブには、バインドを追加するための UI が用意されています。また、ポータル内の関数の [コードとテスト] タブで、このファイルを直接編集することもできます。

.NET および Java では、パラメーター型で入力データのデータ型が定義されます。 たとえば、キュー トリガーのテキストにバインドするには string を、バイナリとして読み取るにはバイト配列を、オブジェクトを逆シリアル化するにはカスタム型を使用します。 .NET クラス ライブラリ関数と Java 関数ではバインドの定義に function.json は使用されないため、これらをポータルで作成したり編集したりすることはできません。 C# ポータルの編集は、属性の代わりに function.json を使用する C# スクリプトに基づいています。

JavaScript などの動的に型指定される言語の場合は、function.json ファイルの dataType プロパティを使用します。 たとえば、バイナリ形式で HTTP 要求のコンテンツを読み取るには、dataTypebinary に設定します。

{
    "dataType": "binary",
    "type": "httpTrigger",
    "name": "req",
    "direction": "in"
}

dataType のその他のオプションは、streamstring です。

バインドの方向

function.json ファイルのすべてのトリガーとバインドには direction プロパティがあります。

  • トリガーの場合、方向は常に in です
  • 入出力バインドは inout を使用します
  • 一部のバインドは、特殊な方向の inout をサポートしてします。 inout を使用する場合、ポータルの [統合] タブで使用できるのはinoutのみです。

クラス ライブラリの属性を使用してトリガーとバインドを構成した場合、その方向は属性コンストラクターで提供されるか、またはパラメーター型から推論されます。

Azure Functions のトリガーとバインドの例

Azure Queue Storage に新しいメッセージが表示されるたびに Azure Table Storage に新しい行を書き込むとします。 このシナリオは、Azure Queue Storage トリガーと Azure Table Storage の出力バインドを使用して実装できます。

このシナリオ用の function.json ファイルを次に示します。

{
  "bindings": [
    {
      "type": "queueTrigger",
      "direction": "in",
      "name": "order",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "type": "table",
      "direction": "out",
      "name": "$return",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

bindings 配列の最初の要素は、Queue Storage トリガーです。 type および direction プロパティは、トリガーを識別します。 name プロパティは、キュー メッセージの内容を受信する関数パラメーターを識別します。 監視するキューの名前は queueName に含まれ、接続文字列は connection で識別されるアプリ設定に含まれています。

bindings 配列の 2 番目の要素は、Azure Table Storage の出力バインドです。 type および direction プロパティは、バインドを識別します。 name プロパティは、その関数が (この場合は関数戻り値を使用して) 新しいテーブル行を提供する方法を指定します。 テーブルの名前は tableName に含まれ、接続文字列は connection で識別されるアプリ設定に含まれています。

C# スクリプトの例

このトリガーとバインドで動作する C# のスクリプト コードを次に示します。 キュー メッセージの内容を提供するパラメーターの名前が order であることに注目してください。function.jsonname プロパティ値は order であるため、この名前が必要です。

#r "Newtonsoft.Json"

using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;

// From an incoming queue message that is a JSON object, add fields and write to Table storage
// The method return value creates a new row in Table Storage
public static Person Run(JObject order, ILogger log)
{
    return new Person() { 
            PartitionKey = "Orders", 
            RowKey = Guid.NewGuid().ToString(),  
            Name = order["Name"].ToString(),
            MobileNumber = order["MobileNumber"].ToString() };  
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

JavaScript の例

同じ function.json ファイルを JavaScript 関数でも使用できます。

// From an incoming queue message that is a JSON object, add fields and write to Table Storage
module.exports = async function (context, order) {
    order.PartitionKey = "Orders";
    order.RowKey = generateRandomId(); 

    context.bindings.order = order;
};

function generateRandomId() {
    return Math.random().toString(36).substring(2, 15) +
        Math.random().toString(36).substring(2, 15);
}

クラス ライブラリの例

クラス ライブラリでは、キューとテーブルの名前、ストレージ アカウント、入出力の関数パラメーターなどの同じトリガーとバインディングの情報が、function.json ファイルではなく、属性で指定されます。 次に例を示します。

public static class QueueTriggerTableOutput
{
    [FunctionName("QueueTriggerTableOutput")]
    [return: Table("outTable", Connection = "MY_TABLE_STORAGE_ACCT_APP_SETTING")]
    public static Person Run(
        [QueueTrigger("myqueue-items", Connection = "MY_STORAGE_ACCT_APP_SETTING")]JObject order,
        ILogger log)
    {
        return new Person() {
                PartitionKey = "Orders",
                RowKey = Guid.NewGuid().ToString(),
                Name = order["Name"].ToString(),
                MobileNumber = order["MobileNumber"].ToString() };
    }
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

その他のリソース

トリガーとバインドの詳細な例については、以下を参照してください。