次の方法で共有


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

この記事では、関数のトリガーとバインドに関する大まかな概念について説明します。

トリガーにより、関数が実行されます。 トリガーは関数の呼び出し方法を定義し、関数には 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 トリガーを定義します。 storageQueueoutput メソッドは、このトリガーの出力バインドを定義します。

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 トリガーを定義します。 storageQueueoutput メソッドは、このトリガーの出力バインドを定義します。

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 (カスタムの入力および出力バインドの作成)」を参照してください。