トリガーとバインディングを作成する
トリガーにより、関数が実行されます。 トリガーで関数の呼び出し方法が定義されます。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 要求のコンテンツを読み取るには、dataType
を binary
に設定します。
{
"dataType": "binary",
"type": "httpTrigger",
"name": "req",
"direction": "in"
}
dataType
のその他のオプションは、stream
と string
です。
バインドの方向
function.json ファイルのすべてのトリガーとバインドには direction プロパティがあります。
- トリガーの場合、方向は常に
in
です - 入出力バインドは
in
とout
を使用します - 一部のバインドは、特殊な方向の
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.json の name
プロパティ値は 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; }
}
その他のリソース
トリガーとバインドの詳細な例については、以下を参照してください。