Azure Functions でのトリガーとバインドの概念

この記事では、関数のトリガーとバインドに関する概念の概要について学習します。

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

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

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

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

さまざまな関数の実装方法の以下の例について考えてみます。

サンプル シナリオ トリガー 入力バインド 出力バインド
新しいキュー メッセージが到着し、別のキューに書き込むための関数が実行されます。 キュー* なし キュー*
スケジュールされたジョブで Blob Storage のコンテンツが読み取られ、新しい Cosmos DB ドキュメントが作成されます。 Timer Blob Storage Cosmos DB
Event Grid は、Blob Storage からイメージを読み取り、Cosmos DB からドキュメントを読み取って、メールを送信するために使用されます。 Event Grid Blob Storage と 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 要求のコンテンツを読み取るには、dataTypebinary に設定します。

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

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

バインドの方向

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

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

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

関数にバインドを追加する

入力バインドまたは出力バインドを使用して、関数を他のサービスに接続できます。 関数に特定の定義を追加することで、バインドを追加します。 詳細については、「Azure Functions の既存の関数にバインドを追加する」を参照してください。

サポートされるバインディング

この表は、Azure Functions のメジャー バージョンのランタイムでサポートされているバインディングを示しています。

種類 1.x 2.x 以降1 トリガー 入力 Output
Blob Storage
Azure Cosmos DB
Azure SQL (プレビュー)
Dapr3
Event Grid
Event Hubs
HTTP と Webhook
IoT Hub
Kafka2
Mobile Apps
Notification Hubs
Queue Storage
RabbitMQ2
SendGrid
Service Bus
SignalR
Table Storage
Timer
Twilio

1 バージョン 2.x ランタイム以降では、HTTP と Timer を除くすべてのバインドを登録する必要があります。 「バインディング拡張機能を登録する」を参照してください。

2 トリガーは従量課金プランでサポートされていません。 ランタイム駆動のトリガーが必要です。

3 Kubernetes、IoT Edge、およびその他の自己ホスト型モードでのみサポートされます。

どのバインディングがプレビューでどのバインディングが実稼働環境で承認されているかについては、サポートされている言語に関する記事をご覧ください。

バインドのコードの例

次の表を使用して、関数でバインドを使用する方法を示す特定のバインドの種類の例を参照してください。 まず、実際のプロジェクトに対応する言語のタブを選択します。

サービス サンプル
BLOB ストレージ トリガー
入力
出力
リンク
Azure Cosmos DB トリガー
入力
出力
リンク
Event Grid トリガー
出力
リンク
Event Hubs トリガー
出力
IoT Hub トリガー
出力
HTTP トリガー リンク
ストレージ トリガー
出力
リンク
RabbitMQ トリガー
出力
SendGrid 出力
Service Bus トリガー
出力
リンク
SignalR トリガー
入力
出力
テーブル ストレージ 入力
出力
Timer トリガー リンク
Twilio 出力 リンク

カスタム バインド

カスタムの入力および出力バインドを作成できます。 バインドは .NET で作成する必要がありますが、サポートされている任意の言語から使用できます。 カスタム バインドの作成の詳細については、「Creating custom input and output bindings (カスタムの入力および出力バインドの作成)」を参照してください。

リソース

次のステップ