この記事では、関数のトリガーとバインドに関する大まかな概念について説明します。
トリガーにより、関数が実行されます。 トリガーは関数の呼び出し方法を定義し、関数には 1 つのトリガーが必要です。 トリガーは、メソッド呼び出しと同様に、関数にデータを渡すこともできます。
関数へのバインドは、関数を他のリソースに宣言的に接続する方法です。 バインドは、関数にデータを渡すか (入力バインド)、またはバインド パラメーターを使用して関数からデータを書き出すことができます (出力バインド)。 関数トリガーは、基本的に特殊な種類の入力バインドです。
バインドを組み合わせて、関数の特定のシナリオに合わせることができます。 バインドは省略可能であり、関数には 1 つまたは複数の入力バインドまたは出力バインドがある場合があります。
トリガーとバインドによって、他のサービスへのアクセスのハードコーディングを回避することができます。 関数は、関数パラメーターでデータ (キュー メッセージの内容など) を受信します。 関数の戻り値を使用して、(たとえば、キュー メッセージを作成するために) データを送信します。
関数を実装する方法の例を次に示します。
| サンプル シナリオ | トリガー | 入力バインド | 出力バインド |
|---|---|---|---|
| 新しいキュー メッセージが到着し、別のキューに書き込む関数が実行されます。 | キュー* | なし | キュー* |
| スケジュールされたジョブは、Azure Blob Storage の内容を読み取り、新しい Azure Cosmos DB ドキュメントを作成します。 | タイマー | Blob Storage | Azure Cosmos DB |
| Azure Event Grid は、Blob Storage からイメージを読み取り、Azure Cosmos DB からドキュメントを読み取って電子メールを送信するために使用されます。 | Event Grid | Blob Storage と Azure Cosmos DB | SendGrid |
* さまざまなキューを表します。
これらの例は網羅的なものではありませんが、トリガーとバインドを組み合わせて使用する方法を示しています。 より包括的なシナリオのセットについては、「Azure Functions のシナリオ」を参照してください。
ヒント
Azure Functions では、入力バインドと出力バインドを使用して Azure サービスに接続する必要はありません。 そうする代わりに、Azure SDK クライアントをコード内でいつでも作成してデータ転送に使用できます。 詳細については、「サービスへの接続」を参照してください。
トリガーとバインドの定義
次の例は、Azure Storage キューにメッセージを書き込む出力バインドを持つ HTTP によってトリガーされる関数を示しています。
C# クラス ライブラリ関数の場合は、C# 属性を使用してメソッドとパラメーターを修飾することで、トリガーとバインドを構成します。 適用する特定の属性は、C# ランタイム モデルによって異なります。
HTTP トリガー (HttpTrigger) は、Run オブジェクトを返す HttpExample という名前の関数の MultiResponse メソッドで定義されます。
[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) は、run という名前の関数のHttpTriggerQueueOutput メソッドで定義されます。 この関数は、 @QueueOutput 注釈が message パラメーターで定義するストレージ キューに書き込みます。
@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 関数のトリガーとバインドを定義する方法は、Azure Functions の Node.js の特定のバージョンによって異なります。
Azure Functions バージョン 4 の Node.js では、 @azure/functions モジュールからエクスポートされたオブジェクトを使用してトリガーとバインドを構成します。 詳細については、 「Node.js 開発者ガイド」を参照してください。
エクスポートされたhttp オブジェクトのapp メソッドは、HTTP トリガーを定義します。
storageQueueのoutput メソッドは、このトリガーの出力バインドを定義します。
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.' };
},
});
エクスポートされたhttp オブジェクトのapp メソッドは、HTTP トリガーを定義します。
storageQueueのoutput メソッドは、このトリガーの出力バインドを定義します。
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 開発者ガイド」を参照してください。
関数の定義方法は、Azure Functions の Python のバージョンによって異なります。
Python for Azure Functions バージョン 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 では複数のバインディングがサポートされており、これらを正しく構成する必要があります。 たとえば、関数はキューからデータを読み取り (入力バインディング)、同時にデータをデータベースに書き込む (出力バインディング) ことができます。
サポートされるバインディング
この表は、Azure Functions のメジャー バージョンのランタイムでサポートされているバインディングを示しています。
| タイプ | 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 | ✔ | ✔ | |||
| キューストレージ | ✔ | ✔ | ✔ | ✔ | |
| Redis(レディス) | ✔ | ✔ | ✔ | ✔ | |
| RabbitMQ3 | ✔ | ✔ | ✔ | ||
| SendGrid | ✔ | ✔ | ✔ | ||
| Service Bus | ✔ | ✔ | ✔ | ✔ | |
| Azure SignalR Service | ✔ | ✔ | ✔ | ✔ | |
| Table Storage | ✔ | ✔ | ✔ | ✔ | |
| タイマー | ✔ | ✔ | ✔ | ||
| Twilio | ✔ | ✔ | ✔ |
1サポートは、2026 年 9 月 14 日に Azure Functions ランタイムのバージョン 1.x で終了します。 完全なサポートのために、アプリをバージョン 4.x に移行することを強くお勧めします。
2 バージョン 2.x ランタイム以降では、HTTP とタイマーを除くすべてのバインディングを登録する必要があります。 Azure Functions バインド拡張機能の登録に関するページを参照してください。
3 トリガーは従量課金プランでサポートされていません。 このバインドの種類には 、ランタイム 駆動型のトリガーが必要です。
4 このバインドの種類は、Kubernetes、Azure IoT Edge、およびその他のセルフホステッド モードでのみサポートされます。
どのバインディングがプレビューでどのバインディングが実稼働環境で承認されているかについては、サポートされている言語に関する記事をご覧ください。
特定のバージョンのバインド拡張機能は、基になるサービス SDK がサポートされている間のみサポートされます。 基になるサービス SDK バージョンでのサポートの変更は、使用する拡張機能のサポートに影響します。
バインドのコード例
次の表を使用して、関数でバインドを使用する方法を示す特定のバインドの種類のその他の例を参照してください。 まず、実際のプロジェクトに対応する言語のタブを選択します。
C# のバインド コードは、具体的なプロセス モデルによって異なります。
| サービス | 例 | サンプル |
|---|---|---|
| Blob Storage |
トリガー 入力 出力 |
リンク |
| Azure Cosmos DB |
トリガー 入力 出力 |
リンク |
| Azure Data Explorer |
入力 出力 |
リンク |
| Azure SQL |
トリガー 入力 出力 |
リンク |
| Event Grid |
トリガー 出力 |
リンク |
| Event Hubs |
トリガー 出力 |
|
| IoT Hub |
トリガー 出力 |
|
| HTTP | トリガー | リンク |
| Queue Storage |
トリガー 出力 |
リンク |
| RabbitMQ(メッセージブローカーソフトウェア) |
トリガー 出力 |
|
| SendGrid | 出力 | |
| Service Bus |
トリガー 出力 |
リンク |
| Azure SignalR Service |
トリガー 入力 出力 |
|
| Table Storage |
入力 出力 |
|
| タイマー | トリガー | リンク |
| Twilio | 出力 | リンク |
| サービス | 例 | サンプル |
|---|---|---|
| Blob Storage |
トリガー 入力 出力 |
リンク |
| Azure Cosmos DB |
トリガー 入力 出力 |
リンク |
| Azure Data Explorer |
入力 出力 |
リンク |
| Azure SQL |
トリガー 入力 出力 |
|
| Event Grid |
トリガー 出力 |
リンク |
| Event Hubs |
トリガー 出力 |
|
| IoT Hub |
トリガー 出力 |
|
| HTTP | トリガー | リンク |
| Queue Storage |
トリガー 出力 |
リンク |
| RabbitMQ(メッセージブローカーソフトウェア) |
トリガー 出力 |
|
| SendGrid | 出力 | |
| Service Bus |
トリガー 出力 |
リンク |
| Azure SignalR Service |
トリガー 入力 出力 |
|
| Table Storage |
入力 出力 |
|
| タイマー | トリガー | リンク |
| Twilio | 出力 |
| サービス | 例 | サンプル |
|---|---|---|
| Blob Storage |
トリガー 入力 出力 |
リンク |
| Azure Cosmos DB |
トリガー 入力 出力 |
リンク |
| Azure Data Explorer |
入力 出力 |
|
| Azure SQL |
トリガー 入力 出力 |
リンク |
| Event Grid |
トリガー 出力 |
|
| Event Hubs |
トリガー 出力 |
|
| IoT Hub |
トリガー 出力 |
|
| HTTP | トリガー | リンク |
| Queue Storage |
トリガー 出力 |
リンク |
| RabbitMQ(メッセージブローカーソフトウェア) |
トリガー 出力 |
|
| SendGrid | 出力 | |
| Service Bus |
トリガー 出力 |
リンク |
| Azure SignalR Service |
トリガー 入力 出力 |
|
| Table Storage |
入力 出力 |
|
| タイマー | トリガー | |
| Twilio | 出力 |
| サービス | 例 | サンプル |
|---|---|---|
| Blob Storage |
トリガー 入力 出力 |
|
| Azure Cosmos DB |
トリガー 入力 出力 |
|
| Azure SQL |
トリガー 入力 出力 |
|
| Event Grid |
トリガー 出力 |
|
| Event Hubs |
トリガー 出力 |
|
| IoT Hub |
トリガー 出力 |
|
| HTTP | トリガー | リンク |
| Queue Storage |
トリガー 出力 |
|
| RabbitMQ(メッセージブローカーソフトウェア) |
トリガー 出力 |
|
| SendGrid | 出力 | |
| Service Bus |
トリガー 出力 |
|
| Azure SignalR Service |
トリガー 入力 出力 |
|
| Table Storage |
入力 出力 |
|
| タイマー | トリガー | |
| Twilio | 出力 |
Python のバインド コードは、Python モデルのバージョンによって異なります。
| サービス | 例 | サンプル |
|---|---|---|
| Blob Storage |
トリガー 入力 出力 |
リンク |
| Azure Cosmos DB |
トリガー 入力 出力 |
リンク |
| Azure Data Explorer |
入力 出力 |
|
| Azure SQL |
トリガー 入力 出力 |
リンク |
| Event Grid |
トリガー 出力 |
|
| Event Hubs |
トリガー 出力 |
|
| IoT Hub |
トリガー 出力 |
|
| HTTP | トリガー | リンク |
| Queue Storage |
トリガー 出力 |
|
| RabbitMQ(メッセージブローカーソフトウェア) |
トリガー 出力 |
|
| SendGrid | 出力 | |
| Service Bus |
トリガー 出力 |
リンク |
| Azure SignalR Service |
トリガー 入力 出力 |
|
| Table Storage |
入力 出力 |
|
| タイマー | トリガー | |
| Twilio | 出力 |
カスタム バインド
カスタムの入力および出力バインドを作成できます。 バインドは .NET で作成する必要がありますが、サポートされている任意の言語から使用できます。 カスタム バインドの作成の詳細については、「Creating custom input and output bindings (カスタムの入力および出力バインドの作成)」を参照してください。