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 |
* さまざまなキューを表します
これらの例には、すべて網羅されているわけではなく、トリガーとバインドを一緒に使用できる方法を示すために提供されています。 より包括的なシナリオのセットについては、「Azure Functions のシナリオ」を参照してください。
ヒント
Functions では、Azure サービスに接続するために、入力バインドと出力バインドを使用する必要はありません。 そうする代わりに、Azure SDK クライアントをコード内でいつでも作成してデータ転送に使用できます。 詳細については、「サービスへの接続」を参照してください。
トリガーとバインドの定義
トリガーとバインドは、開発言語に応じて異なる方法で定義されます。 この記事の冒頭で必ずお使いの言語を選択してください。
バインドは、入力バインドまたは出力バインドのいずれかにできます。 すべてのサービスが入力バインドと出力バインドの両方をサポートしているわけではありません。 特定のバインドのコード例については、特定のバインド拡張機能を参照してください。
この例では、Azure Storage キューにメッセージを書き込む出力バインドを使用して、HTTP によってトリガーされる関数を示します。
C# クラス ライブラリ関数の場合、トリガーとバインドは、C# 属性を使用してメソッドとパラメーターを修飾することによって構成されます。この場合、適用される特定の属性は、C# ランタイム モデルによって異なる場合があります。
HTTP トリガー (HttpTrigger
) は、MultiResponse
オブジェクトを返す HttpExample
という名前の関数の Run
メソッドで定義されます。
[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
この例では、MultiResponse
オブジェクト定義を示します。このオブジェクト定義は、HTTP 要求に HttpResponse
を返し、QueueOutput
バインドを使用してストレージ キューにもメッセージを書き込みます。
public class MultiResponse
{
[QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
詳細については、「C# 分離ワーカー モデル ガイド」を参照してください。
従来の C# スクリプト関数では、function.json 定義ファイルが使用されます。 詳細については、Azure Functions C# スクリプト (.csx) 開発者向けリファレンスを参照してください。
Java 関数の場合、トリガーとバインドは、特定のメソッドとパラメーターに注釈を付けることで構成されます。 この HTTP トリガー (@HttpTrigger
) は、HttpTriggerQueueOutput
という名前の関数のために run
メソッドで定義されます。この関数は、message
パラメーターの @QueueOutput
注釈で定義されたストレージ キューへの書き込みを行います。
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@QueueOutput(name = "msg", queueName = "outqueue",
connection = "AzureWebJobsStorage") OutputBinding<String> msg,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
詳細については、「Java 開発者ガイド」を参照してください。
Node.js 関数のためのトリガーとバインドを定義する方法は、関数用の Node.js の特定のバージョンによって異なります。
関数用の Node.js のバージョン 4 では、@azure/functions
モジュールからエクスポートされたオブジェクトを使用してトリガーとバインドを構成します。 詳細については、 「Node.js 開発者ガイド」を参照してください。
この例は、受信した HTTP 要求ごとにキュー項目を作成する HTTP によってトリガーされる関数です。
エクスポートされた app
オブジェクトの http
メソッドは HTTP トリガーを定義し、output
の storageQueue
メソッドはこのトリガーの出力バインドを定義します。
const { app, output } = require('@azure/functions');
const queueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
});
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [queueOutput],
handler: async (request, context) => {
const body = await request.text();
context.extraOutputs.set(queueOutput, body);
return { body: 'Created queue item.' };
},
});
エクスポートされた app
オブジェクトの http
メソッドは HTTP トリガーを定義し、output
の storageQueue
メソッドはこのトリガーの出力バインドを定義します。
import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';
const queueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const body = await request.text();
context.extraOutputs.set(queueOutput, body);
return { body: 'Created queue item.' };
}
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [queueOutput],
handler: httpTrigger1,
});
この例の function.json
ファイルは、関数を定義します。
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"type": "queue",
"direction": "out",
"name": "msg",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
]
}
詳細については、「PowerShell 開発者ガイド」を参照してください。
関数の定義方法は、関数用の Python のバージョンによって異なります。
関数用の Python のバージョン 2 では、デコレーターを使用してコードで関数を直接定義します。
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
関数にバインドを追加する
入力バインドまたは出力バインドを使用して、関数を他のサービスに接続できます。 関数に特定の定義を追加することで、バインドを追加します。 詳細については、「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 | ✔ | ✔ | ✔ |
注:
- Azure Functions Runtime のバージョン 1.x のサポートは 2026 年 9 月 14 日に終了します。 完全なサポートのために、アプリをバージョン 4.x に移行することを強くお勧めします。
- バージョン 2.x ランタイム以降では、HTTP と Timer を除くすべてのバインドを登録する必要があります。 「バインディング拡張機能を登録する」を参照してください。
- トリガーは従量課金プランでサポートされていません。 ランタイム駆動のトリガーが必要です。
- 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 (カスタムの入力および出力バインドの作成)」を参照してください。