Azure Functions でのトリガーとバインドの概念
この記事では、関数のトリガーとバインドに関する概念の概要について学習します。
トリガーにより、関数が実行されます。 トリガーで関数の呼び出し方法が定義されます。1 つの関数には正確に 1 つのトリガーを含める必要があります。 トリガーにはデータが関連付けられていて、多くの場合、関数のペイロードとして提供されます。
関数へのバインドは、関数に別のリソースを宣言的に接続する方法です。バインドは入力バインド または出力バインド、あるいは両方として接続される場合があります。 バインドからのデータは、パラメーターとして関数に提供されます。
ニーズに合わせて、さまざまなバインドを組み合わせることができます。 バインドは省略可能であり、関数には 1 つまたは複数の入力または出力バインドがある場合があります。
トリガーとバインドによって、他のサービスへのアクセスのハードコーディングを回避することができます。 関数は、関数パラメーターでデータ (キュー メッセージの内容など) を受信します。 関数の戻り値を使用して、(たとえば、キュー メッセージを作成するために) データを送信します。
さまざまな関数の実装方法の以下の例について考えてみます。
サンプル シナリオ | トリガー | 入力バインド | 出力バインド |
---|---|---|---|
新しいキュー メッセージが到着し、別のキューに書き込むための関数が実行されます。 | キュー* | なし | キュー* |
スケジュールされたジョブで Blob Storage のコンテンツが読み取られ、新しい Azure Cosmos DB ドキュメントが作成されます。 | Timer | Blob Storage | Azure Cosmos DB |
Event Grid は、Blob Storage からイメージを読み取り、Azure Cosmos DB からドキュメントを読み取って、メールを送信するために使われます。 | Event Grid | Blob Storage と Azure Cosmos DB | SendGrid |
Microsoft Graph を使用して Excel シートを更新する webhook。 | HTTP | なし | Microsoft Graph |
* さまざまなキューを表します
これらの例には、すべて網羅されているわけではなく、トリガーとバインドを一緒に使用できる方法を示すために提供されています。
トリガーとバインドの定義
トリガーとバインドは、開発言語に応じて異なる方法で定義されます。
Language | トリガーとバインドは、以下を行うことで構成されます |
---|---|
C# クラス ライブラリ | C# 属性でのメソッドとパラメーターの修飾 |
Java | Java 注釈でのメソッドとパラメーターの修飾 |
JavaScript/PowerShell/Python/TypeScript | function.json (スキーマ) の更新 |
function.json に依存する言語用に、ポータルの [統合] タブには、バインドを追加するための UI が用意されています。また、ポータル内の関数の [コードとテスト] タブで、このファイルを直接編集することもできます。 Visual Studio Code では、便利な一連のプロンプトに従って、簡単に function.json ファイルにバインドを追加できます。
.NET および Java では、パラメーター型で入力データのデータ型が定義されます。 たとえば、キュー トリガーのテキストにバインドするには string
を、バイナリとして読み取るにはバイト配列を、オブジェクトを逆シリアル化するにはカスタム型を使用します。 .NET クラス ライブラリ関数と Java 関数ではバインドの定義に function.json は使用されないため、これらをポータルで作成したり編集したりすることはできません。 C# ポータルの編集は、属性の代わりに function.json を使用する C# スクリプトに基づいています。
既存の関数にバインドを追加する方法の詳細については、「バインドを使用して関数を Azure サービスに接続する」を参照してください。
JavaScript などの動的に型指定される言語の場合は、dataType
ファイルの dataType
プロパティを使用します。 たとえば、バイナリ形式で HTTP 要求のコンテンツを読み取るには、dataType
を binary
に設定します。
{
"dataType": "binary",
"type": "httpTrigger",
"name": "req",
"direction": "in"
}
dataType
のその他のオプションは、stream
と string
です。
バインドの方向
すべてのトリガーとバインドには、direction
ファイルに direction
プロパティがあります。
- トリガーの場合、方向は常に
in
です - 入出力バインドは
in
とout
を使用します - 一部のバインドは、特殊な方向の
inout
をサポートしてします。inout
を使用する場合、ポータルの [統合] タブで使用できるのはinout
のみです。
クラス ライブラリの属性を使用してトリガーとバインドを構成した場合、その方向は属性コンストラクターで提供されるか、またはパラメーター型から推論されます。
関数にバインドを追加する
入力バインドまたは出力バインドを使用して、関数を他のサービスに接続できます。 関数に特定の定義を追加することで、バインドを追加します。 詳細については、「Azure Functions の既存の関数にバインドを追加する」を参照してください。
サポートされるバインディング
この表は、Azure Functions のメジャー バージョンのランタイムでサポートされているバインディングを示しています。
Type | 1.x1 | 2.x 以降2 | トリガー | 入力 | 出力 |
---|---|---|---|---|---|
Blob Storage | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure Data Explorer | ✔ | ✔ | ✔ | ||
Azure SQL | ✔ | ✔ | ✔ | ✔ | |
Dapr4 | ✔ | ✔ | ✔ | ✔ | |
Event Grid | ✔ | ✔ | ✔ | ✔ | |
Event Hubs | ✔ | ✔ | ✔ | ✔ | |
HTTP と Webhook | ✔ | ✔ | ✔ | ✔ | |
IoT Hub | ✔ | ✔ | ✔ | ||
Kafka3 | ✔ | ✔ | ✔ | ||
Mobile Apps | ✔ | ✔ | ✔ | ||
Notification Hubs | ✔ | ✔ | |||
Queue Storage | ✔ | ✔ | ✔ | ✔ | |
Redis | ✔ | ✔ | |||
RabbitMQ3 | ✔ | ✔ | ✔ | ||
SendGrid | ✔ | ✔ | ✔ | ||
Service Bus | ✔ | ✔ | ✔ | ✔ | |
SignalR | ✔ | ✔ | ✔ | ✔ | |
Table Storage | ✔ | ✔ | ✔ | ✔ | |
Timer | ✔ | ✔ | ✔ | ||
Twilio | ✔ | ✔ | ✔ |
1Azure Functions Runtime のバージョン 1.x のサポートは 2026 年 9 月 14 日に終了します。 完全なサポートのために、アプリをバージョン 4.x に移行することを強くお勧めします。
2 バージョン 2.x ランタイム以降では、HTTP と Timer を除くすべてのバインドを登録する必要があります。 「バインディング拡張機能を登録する」を参照してください。
3 トリガーは従量課金プランでサポートされていません。 ランタイム駆動のトリガーが必要です。
4 Kubernetes、IoT Edge、およびその他のセルフホステッド モードでのみサポートされます。
どのバインディングがプレビューでどのバインディングが実稼働環境で承認されているかについては、サポートされている言語に関する記事をご覧ください。
特定のバインディング拡張機能バージョンは、基になるサービス SDK がサポートされている間のみサポートされます。 基になるサービス SDK バージョンでのサポートの変更は、使用する拡張機能のサポートに影響します。
バインドのコードの例
次の表を使用して、関数でバインドを使用する方法を示す特定のバインドの種類の例を参照してください。 まず、実際のプロジェクトに対応する言語のタブを選択します。
C# のバインド コードは、具体的なプロセス モデルによって異なります。
サービス | 例 | サンプル |
---|---|---|
BLOB ストレージ | トリガー 入力 出力 |
リンク |
Azure Cosmos DB | トリガー 入力 出力 |
リンク |
Azure Data Explorer | 入力 出力 |
リンク |
Azure SQL | トリガー 入力 出力 |
リンク |
Event Grid | トリガー 出力 |
リンク |
Event Hubs | トリガー 出力 |
|
IoT Hub | トリガー 出力 |
|
HTTP | トリガー | リンク |
ストレージ | トリガー 出力 |
リンク |
RabbitMQ | トリガー 出力 |
|
SendGrid | 出力 | |
Service Bus | トリガー 出力 |
リンク |
SignalR | トリガー 入力 出力 |
|
テーブル ストレージ | 入力 出力 |
|
Timer | トリガー | リンク |
Twilio | 出力 | リンク |
サービス | 例 | サンプル |
---|---|---|
BLOB ストレージ | トリガー 入力 出力 |
リンク |
Azure Cosmos DB | トリガー 入力 出力 |
リンク |
Azure Data Explorer | 入力 出力 |
リンク |
Azure SQL | トリガー 入力 出力 |
|
Event Grid | トリガー 出力 |
リンク |
Event Hubs | トリガー 出力 |
|
IoT Hub | トリガー 出力 |
|
HTTP | トリガー | リンク |
ストレージ | トリガー 出力 |
リンク |
RabbitMQ | トリガー 出力 |
|
SendGrid | 出力 | |
Service Bus | トリガー 出力 |
リンク |
SignalR | トリガー 入力 出力 |
|
テーブル ストレージ | 入力 出力 |
|
Timer | トリガー | リンク |
Twilio | 出力 | リンク |
サービス | 例 | サンプル |
---|---|---|
BLOB ストレージ | トリガー 入力 出力 |
リンク |
Azure Cosmos DB | トリガー 入力 出力 |
リンク |
Azure Data Explorer | 入力 出力 |
|
Azure SQL | トリガー 入力 出力 |
リンク |
Event Grid | トリガー 出力 |
リンク |
Event Hubs | トリガー 出力 |
|
IoT Hub | トリガー 出力 |
|
HTTP | トリガー | リンク |
ストレージ | トリガー 出力 |
リンク |
RabbitMQ | トリガー 出力 |
|
SendGrid | 出力 | |
Service Bus | トリガー 出力 |
リンク |
SignalR | トリガー 入力 出力 |
|
テーブル ストレージ | 入力 出力 |
|
Timer | トリガー | リンク |
Twilio | 出力 | リンク |
サービス | 例 | サンプル |
---|---|---|
BLOB ストレージ | トリガー 入力 出力 |
リンク |
Azure Cosmos DB | トリガー 入力 出力 |
リンク |
Azure SQL | トリガー 入力 出力 |
|
Event Grid | トリガー 出力 |
リンク |
Event Hubs | トリガー 出力 |
|
IoT Hub | トリガー 出力 |
|
HTTP | トリガー | リンク |
ストレージ | トリガー 出力 |
リンク |
RabbitMQ | トリガー 出力 |
|
SendGrid | 出力 | |
Service Bus | トリガー 出力 |
リンク |
SignalR | トリガー 入力 出力 |
|
テーブル ストレージ | 入力 出力 |
|
Timer | トリガー | リンク |
Twilio | 出力 | リンク |
Python のバインド コードは、Python モデルのバージョンによって異なります。
サービス | 例 | サンプル |
---|---|---|
BLOB ストレージ | トリガー 入力 出力 |
リンク |
Azure Cosmos DB | トリガー 入力 出力 |
リンク |
Azure Data Explorer | 入力 出力 |
|
Azure SQL | トリガー 入力 出力 |
リンク |
Event Grid | トリガー 出力 |
リンク |
Event Hubs | トリガー 出力 |
|
IoT Hub | トリガー 出力 |
|
HTTP | トリガー | リンク |
ストレージ | トリガー 出力 |
リンク |
RabbitMQ | トリガー 出力 |
|
SendGrid | 出力 | |
Service Bus | トリガー 出力 |
リンク |
SignalR | トリガー 入力 出力 |
|
テーブル ストレージ | 入力 出力 |
|
Timer | トリガー | リンク |
Twilio | 出力 | リンク |
カスタム バインド
カスタムの入力および出力バインドを作成できます。 バインドは .NET で作成する必要がありますが、サポートされている任意の言語から使用できます。 カスタム バインドの作成の詳細については、「Creating custom input and output bindings (カスタムの入力および出力バインドの作成)」を参照してください。