Azure Functions における Azure Event Hubs のバインドAzure Event Hubs bindings for Azure Functions

この記事では、Azure Functions で Azure Event Hubs のバインドを使用する方法について説明します。This article explains how to work with Azure Event Hubs bindings for Azure Functions. Azure Functions は、イベント ハブのトリガーおよび出力バインドをサポートしています。Azure Functions supports trigger and output bindings for Event Hubs.

これは、Azure Functions の開発者向けリファレンス情報です。This is reference information for Azure Functions developers. Azure Functions を初めて使用する場合は、先に次のリソースを参照してください。If you're new to Azure Functions, start with the following resources:

パッケージ - Functions 1.xPackages - Functions 1.x

Azure Functions バージョン 1.x の場合、Event Hubs バインディングは Microsoft.Azure.WebJobs.ServiceBus NuGet パッケージ、バージョン 2.x で提供されます。For Azure Functions version 1.x, the Event Hubs bindings are provided in the Microsoft.Azure.WebJobs.ServiceBus NuGet package, version 2.x. パッケージのソース コードは、azure-webjobs-sdk GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 1.xFunctions 1.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#Local development - C# script, JavaScript, F# 自動Automatic
Portal 開発Portal development 自動Automatic

パッケージ - Functions 2.xPackages - Functions 2.x

Functions 2.x の場合、Microsoft.Azure.WebJobs.Extensions.EventHubs パッケージ、バージョン 3.x を使用します。For Functions 2.x, use the Microsoft.Azure.WebJobs.Extensions.EventHubs package, version 3.x. パッケージのソース コードは、azure-webjobs-sdk GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 2.xFunctions 2.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#、Java、PythonLocal development - C# script, JavaScript, F#, Java and Python 拡張機能を登録するRegister the extension
Portal 開発Portal development 出力バインドの追加時にインストールするInstall when adding output binding

関数アプリ プロジェクトを再発行せずにポータルで既存のバインディング拡張機能を更新する方法については、拡張機能の更新に関するページを参照してください。To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

トリガーTrigger

関数トリガーを使用して、イベント ハブのイベント ストリームに送信されたイベントに応答します。Use the function trigger to respond to an event sent to an event hub event stream. トリガーを設定するには、基になるイベント ハブへの読み取りアクセスが必要です。You must have read access to the underlying event hub to set up the trigger. 関数がトリガーされると、その関数に渡されるメッセージが文字列として型指定されます。When the function is triggered, the message passed to the function is typed as a string.

トリガー - スケーリングTrigger - scaling

イベントによってトリガーされる関数の各インスタンスには、1 つの EventProcessorHost インスタンスが対応します。Each instance of an event triggered function is backed by a single EventProcessorHost instance. (Event Hubs によって提供される) トリガーにより、1 つの EventProcessorHost インスタンスだけが特定のパーティションのリースを取得できるようになります。The trigger (powered by Event Hubs) ensures that only one EventProcessorHost instance can get a lease on a given partition.

たとえば、次のようなイベント ハブを検討します。For example, consider an Event Hub as follows:

  • 10 個のパーティション。10 partitions
  • 1000 個のイベントがすべてのパーティション間で均等に分散され、各パーティション内に 100 個のメッセージがある。1,000 events distributed evenly across all partitions, with 100 messages in each partition

関数が最初に有効化されたときに存在する関数インスタンスは 1 つのみです。When your function is first enabled, there is only one instance of the function. 最初の関数インスタンス Function_0 を呼び出しましょう。Let's call the first function instance Function_0. Function_0 関数は、全 10 個のパーティションの 1 つのリースを保持する EventProcessorHost の単一のインスタンスを持ちます。The Function_0 function has a single instance of EventProcessorHost that holds a lease on all ten partitions. このインスタンスは、パーティション 0 ~ 9 からイベントを読み取ります。This instance is reading events from partitions 0-9. この後、次のいずれかが発生します。From this point forward, one of the following happens:

  • 新しい関数インスタンスは必要とされない: Function_0 は、Functions のスケーリング ロジックが有効になる前に、1000 個のイベントをすべて処理できます。New function instances are not needed: Function_0 is able to process all 1,000 events before the Functions scaling logic take effect. この場合、1000 個のメッセージはすべて Function_0 によって処理されます。In this case, all 1,000 messages are processed by Function_0.

  • 別の関数インスタンスが追加される:Functions のスケーリング ロジックによって、Function_0 にその処理能力を超える数のメッセージがあると判断されると、新しい関数アプリ インスタンス (Function_1) が作成されます。An additional function instance is added: If the Functions scaling logic determines that Function_0 has more messages than it can process, a new function app instance (Function_1) is created. この新しい関数にも、EventProcessorHost のインスタンスが関連付けられています。This new function also has an associated instance of EventProcessorHost. 基になる Event Hubs は、新しいホスト インスタンスがメッセージを読み取ろうとしていることを検出すると、ホスト インスタンス間でパーティションを負荷分散します。As the underlying Event Hubs detect that a new host instance is trying read messages, it load balances the partitions across the its host instances. たとえば、パーティション 0 ~ 4 を Function_0 に割り当て、パーティション 5 ~ 9 を Function_1 に割り当てることができます。For example, partitions 0-4 may be assigned to Function_0 and partitions 5-9 to Function_1.

  • さらに N 個の関数インスタンスが追加される:Functions のスケーリング ロジックによって、Function_0Function_1 のどちらにもその処理能力を超える数のメッセージがあると判断されると、新しい Functions_N 関数アプリ インスタンスが作成されます。N more function instances are added: If the Functions scaling logic determines that both Function_0 and Function_1 have more messages than they can process, new Functions_N function app instances are created. アプリは、N がイベント ハブ パーティションの数を超えた時点で作成されます。Apps are created to the point where N is greater than the number of event hub partitions. この例では、Event Hubs は、パーティションを再び負荷分散します。この場合、 Function_0...Functions_9 のインスタンス間で負荷分散します。In our example, Event Hubs again load balances the partitions, in this case across the instances Function_0...Functions_9.

Functions がスケーリングすると、インスタンスの数 N が、イベント ハブ パーティションの数より多くなります。When Functions scales, N instances is a number greater than the number of event hub partitions. これは、EventProcessorHost インスタンスが、他のインスタンスから解放されて使用可能になったパーティションのロックを確実に取得できるようにするためです。This is done to ensure EventProcessorHost instances are available to obtain locks on partitions as they become available from other instances. 関数インスタンスの実行時に使用されたリソースにのみ課金されます。You are only charged for the resources used when the function instance executes. つまり、オーバー プロビジョニングには課金されません。In other words, you are not charged for this over-provisioning.

すべての関数の実行が (エラーの有無にかかわらず) 完了すると、関連付けられているストレージ アカウントにチェックポイントが追加されます。When all function execution completes (with or without errors), checkpoints are added to the associated storage account. チェックポイントの追加が成功したら、1000 個のすべてのメッセージが再度取得されることはありません。When check-pointing succeeds, all 1,000 messages are never retrieved again.

トリガー - 例Trigger - example

言語固有の例をご覧ください。See the language-specific example:

トリガー - C# の例Trigger - C# example

次の例は、イベント ハブ トリガーのメッセージ本文をログに記録する C# 関数を示しています。The following example shows a C# function that logs the message body of the event hub trigger.

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] string myEventHubMessage, ILogger log)
{
    log.LogInformation($"C# function triggered to process a message: {myEventHubMessage}");
}

関数コードのイベント メタデータにアクセスするには、(Microsoft.Azure.EventHubs の using ステートメントを必要とする) EventData オブジェクトにバインドします。To get access to event metadata in function code, bind to an EventData object (requires a using statement for Microsoft.Azure.EventHubs). また、メソッド シグネチャ内のバインディング式を使用して、同じプロパティにアクセスすることもできます。You can also access the same properties by using binding expressions in the method signature. 次の例は、同じデータを取得する 2 つの方法を示しています。The following example shows both ways to get the same data:

[FunctionName("EventHubTriggerCSharp")]
public static void Run(
    [EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] EventData myEventHubMessage,
    DateTime enqueuedTimeUtc,
    Int64 sequenceNumber,
    string offset,
    ILogger log)
{
    log.LogInformation($"Event: {Encoding.UTF8.GetString(myEventHubMessage.Body)}");
    // Metadata accessed by binding to EventData
    log.LogInformation($"EnqueuedTimeUtc={myEventHubMessage.SystemProperties.EnqueuedTimeUtc}");
    log.LogInformation($"SequenceNumber={myEventHubMessage.SystemProperties.SequenceNumber}");
    log.LogInformation($"Offset={myEventHubMessage.SystemProperties.Offset}");
    // Metadata accessed by using binding expressions in method parameters
    log.LogInformation($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.LogInformation($"SequenceNumber={sequenceNumber}");
    log.LogInformation($"Offset={offset}");
}

イベントを一括で受け取るには、string または EventData を配列にします。To receive events in a batch, make string or EventData an array.

注意

一括で受け取る場合、上記の例のように DateTime enqueuedTimeUtc を使用してメソッド パラメーターをバインドすることはできないため、各 EventData オブジェクトからパラメーターを受け取る必要があります。When receiving in a batch you cannot bind to method parameters like in the above example with DateTime enqueuedTimeUtc and must receive these from each EventData object

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] EventData[] eventHubMessages, ILogger log)
{
    foreach (var message in eventHubMessages)
    {
        log.LogInformation($"C# function triggered to process a message: {Encoding.UTF8.GetString(message.Body)}");
        log.LogInformation($"EnqueuedTimeUtc={message.SystemProperties.EnqueuedTimeUtc}");
    }
}

トリガー - C# スクリプトの例Trigger - C# script example

次の例は、function.json ファイルのイベント ハブ トリガー バインドと、そのバインドが使用される C# スクリプト関数を示しています。The following example shows an event hub trigger binding in a function.json file and a C# script function that uses the binding. この関数では、イベント ハブ トリガーのメッセージ本文を記録します。The function logs the message body of the event hub trigger.

次の例は、function.json ファイル内の Event Hubs バインディング データを示しています。The following examples show Event Hubs binding data in the function.json file.

バージョン 2.xVersion 2.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

バージョン 1.xVersion 1.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "path": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

C# スクリプト コードを次に示します。Here's the C# script code:

using System;

public static void Run(string myEventHubMessage, TraceWriter log)
{
    log.Info($"C# function triggered to process a message: {myEventHubMessage}");
}

関数コードのイベント メタデータにアクセスするには、(Microsoft.Azure.EventHubs の using ステートメントを必要とする) EventData オブジェクトにバインドします。To get access to event metadata in function code, bind to an EventData object (requires a using statement for Microsoft.Azure.EventHubs). また、メソッド シグネチャ内のバインディング式を使用して、同じプロパティにアクセスすることもできます。You can also access the same properties by using binding expressions in the method signature. 次の例は、同じデータを取得する 2 つの方法を示しています。The following example shows both ways to get the same data:

#r "Microsoft.Azure.EventHubs"

using System.Text;
using System;
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.EventHubs;

public static void Run(EventData myEventHubMessage,
    DateTime enqueuedTimeUtc,
    Int64 sequenceNumber,
    string offset,
    TraceWriter log)
{
    log.Info($"Event: {Encoding.UTF8.GetString(myEventHubMessage.Body)}");
    log.Info($"EnqueuedTimeUtc={myEventHubMessage.SystemProperties.EnqueuedTimeUtc}");
    log.Info($"SequenceNumber={myEventHubMessage.SystemProperties.SequenceNumber}");
    log.Info($"Offset={myEventHubMessage.SystemProperties.Offset}");

    // Metadata accessed by using binding expressions
    log.Info($"EnqueuedTimeUtc={enqueuedTimeUtc}");
    log.Info($"SequenceNumber={sequenceNumber}");
    log.Info($"Offset={offset}");
}

イベントを一括で受け取るには、string または EventData を配列にします。To receive events in a batch, make string or EventData an array:

public static void Run(string[] eventHubMessages, TraceWriter log)
{
    foreach (var message in eventHubMessages)
    {
        log.Info($"C# function triggered to process a message: {message}");
    }
}

トリガー - F# の例Trigger - F# example

次の例は、function.json ファイルのイベント ハブ トリガー バインドと、そのバインドが使用される F# 関数を示しています。The following example shows an event hub trigger binding in a function.json file and an F# function that uses the binding. この関数では、イベント ハブ トリガーのメッセージ本文を記録します。The function logs the message body of the event hub trigger.

次の例は、function.json ファイル内の Event Hubs バインディング データを示しています。The following examples show Event Hubs binding data in the function.json file.

バージョン 2.xVersion 2.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

バージョン 1.xVersion 1.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "path": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

F# コードを次に示します。Here's the F# code:

let Run(myEventHubMessage: string, log: TraceWriter) =
    log.Log(sprintf "F# eventhub trigger function processed work item: %s" myEventHubMessage)

トリガー - JavaScript の例Trigger - JavaScript example

次の例は、function.json ファイルのイベント ハブ トリガー バインドと、そのバインドが使用される JavaScript 関数を示しています。The following example shows an event hub trigger binding in a function.json file and a JavaScript function that uses the binding. この関数は、イベント メタデータを読み取り、メッセージをログに記録します。The function reads event metadata and logs the message.

次の例は、function.json ファイル内の Event Hubs バインディング データを示しています。The following examples show Event Hubs binding data in the function.json file.

バージョン 2.xVersion 2.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

バージョン 1.xVersion 1.x

{
  "type": "eventHubTrigger",
  "name": "myEventHubMessage",
  "direction": "in",
  "path": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

JavaScript コードを次に示します。Here's the JavaScript code:

module.exports = function (context, eventHubMessage) {
    context.log('Function triggered to process a message: ', myEventHubMessage);
    context.log('EnqueuedTimeUtc =', context.bindingData.enqueuedTimeUtc);
    context.log('SequenceNumber =', context.bindingData.sequenceNumber);
    context.log('Offset =', context.bindingData.offset);

    context.done();
};

イベントをまとめて受け取るには、次の例に示すように、function.json ファイルで cardinalitymany に設定します。To receive events in a batch, set cardinality to many in the function.json file, as shown in the following examples.

バージョン 2.xVersion 2.x

{
  "type": "eventHubTrigger",
  "name": "eventHubMessages",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "cardinality": "many",
  "connection": "myEventHubReadConnectionAppSetting"
}

バージョン 1.xVersion 1.x

{
  "type": "eventHubTrigger",
  "name": "eventHubMessages",
  "direction": "in",
  "path": "MyEventHub",
  "cardinality": "many",
  "connection": "myEventHubReadConnectionAppSetting"
}

JavaScript コードを次に示します。Here's the JavaScript code:

module.exports = function (context, eventHubMessages) {
    context.log(`JavaScript eventhub trigger function called for message array ${eventHubMessages}`);

    eventHubMessages.forEach((message, index) => {
        context.log(`Processed message ${message}`);
        context.log(`EnqueuedTimeUtc = ${context.bindingData.enqueuedTimeUtcArray[index]}`);
        context.log(`SequenceNumber = ${context.bindingData.sequenceNumberArray[index]}`);
        context.log(`Offset = ${context.bindingData.offsetArray[index]}`);
    });

    context.done();
};

トリガー - Python の例Trigger - Python example

次の例は、function.json ファイルのイベント ハブ トリガー バインドと、そのバインドが使用される Python 関数を示しています。The following example shows an event hub trigger binding in a function.json file and a Python function that uses the binding. この関数は、イベント メタデータを読み取り、メッセージをログに記録します。The function reads event metadata and logs the message.

次の例は、function.json ファイル内の Event Hubs バインディング データを示しています。The following examples show Event Hubs binding data in the function.json file.

{
  "type": "eventHubTrigger",
  "name": "event",
  "direction": "in",
  "eventHubName": "MyEventHub",
  "connection": "myEventHubReadConnectionAppSetting"
}

Python コードを次に示します。Here's the Python code:

import logging
import azure.functions as func

def main(event: func.EventHubEvent):
    logging.info('Function triggered to process a message: ', event.get_body())
    logging.info('  EnqueuedTimeUtc =', event.enqueued_time)
    logging.info('  SequenceNumber =', event.sequence_number)
    logging.info('  Offset =', event.offset)

トリガー - Java の例Trigger - Java example

次の例は、function.json ファイルの Event Hub トリガー バインドと、そのバインドが使用される Java 関数を示しています。The following example shows an Event Hub trigger binding in a function.json file and an Java function that uses the binding. この関数では、Event Hub トリガーのメッセージ本文を記録します。The function logs the message body of the Event Hub trigger.

{
  "type": "eventHubTrigger",
  "name": "msg",
  "direction": "in",
  "eventHubName": "myeventhubname",
  "connection": "myEventHubReadConnectionAppSetting"
}
@FunctionName("ehprocessor")
public void eventHubProcessor(
  @EventHubTrigger(name = "msg",
                  eventHubName = "myeventhubname",
                  connection = "myconnvarname") String message,
       final ExecutionContext context )
       {
          context.getLogger().info(message);
 }

Java 関数ランタイム ライブラリで、その値が Event Hub に由来するパラメーター上で EventHubTrigger 注釈を使用します。In the Java functions runtime library, use the EventHubTrigger annotation on parameters whose value would come from Event Hub. これらの注釈を使用したパラメーターによって、イベントを受信したときに関数が実行されます。Parameters with these annotations cause the function to run when an event arrives. この注釈は、Java のネイティブ型、POJO、または Optional を使用した null 許容値で使用できます。This annotation can be used with native Java types, POJOs, or nullable values using Optional.

トリガー - 属性Trigger - attributes

C# クラス ライブラリでは、EventHubTriggerAttribute 属性を使用します。In C# class libraries, use the EventHubTriggerAttribute attribute.

この属性のコンストラクターは、イベント ハブの名前とコンシューマー グループの名前のほか、接続文字列が含まれたアプリ設定の名前を受け取ります。The attribute's constructor takes the name of the event hub, the name of the consumer group, and the name of an app setting that contains the connection string. これらの設定の詳細については、「トリガー - 構成」セクションを参照してください。For more information about these settings, see the trigger configuration section. EventHubTriggerAttribute 属性の例を次に示します。Here's an EventHubTriggerAttribute attribute example:

[FunctionName("EventHubTriggerCSharp")]
public static void Run([EventHubTrigger("samples-workitems", Connection = "EventHubConnectionAppSetting")] string myEventHubMessage, ILogger log)
{
    ...
}

完全な例については、「トリガー - C# の例」を参照してください。For a complete example, see Trigger - C# example.

トリガー - 構成Trigger - configuration

次の表は、function.json ファイルと EventHubTrigger 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the EventHubTrigger attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a eventHubTrigger に設定する必要があります。Must be set to eventHubTrigger. このプロパティは、Azure Portal でトリガーを作成するときに自動で設定されます。This property is set automatically when you create the trigger in the Azure portal.
directiondirection 該当なしn/a in に設定する必要があります。Must be set to in. このプロパティは、Azure Portal でトリガーを作成するときに自動で設定されます。This property is set automatically when you create the trigger in the Azure portal.
namename 該当なしn/a 関数コード内のイベント項目を表す変数の名前。The name of the variable that represents the event item in function code.
pathpath EventHubNameEventHubName Functions 1.x のみ。Functions 1.x only. イベント ハブの名前。The name of the event hub. イベント ハブの名前は接続文字列にも存在し、その値が実行時にこのプロパティをオーバーライドします。When the event hub name is also present in the connection string, that value overrides this property at runtime.
eventHubNameeventHubName EventHubNameEventHubName Functions 2.x のみ。Functions 2.x only. イベント ハブの名前。The name of the event hub. イベント ハブの名前は接続文字列にも存在し、その値が実行時にこのプロパティをオーバーライドします。When the event hub name is also present in the connection string, that value overrides this property at runtime.
consumerGroupconsumerGroup ConsumerGroupConsumerGroup ハブのイベントのサブスクライブに使用されるコンシューマー グループ#event-consumers)を設定する、省略可能なプロパティ。An optional property that sets the consumer group#event-consumers) used to subscribe to events in the hub. 省略した場合は、$Default コンシューマー グループが使用されます。If omitted, the $Default consumer group is used.
cardinalitycardinality 該当なしn/a Javascript 用。For Javascript. バッチ処理を有効にするには many に設定します。Set to many in order to enable batching. 省略するか、one に設定した場合、1 つのメッセージが関数に渡されます。If omitted or set to one, single message passed to function.
connectionconnection ConnectionConnection イベント ハブの名前空間への接続文字列が含まれたアプリ設定の名前。The name of an app setting that contains the connection string to the event hub's namespace. この接続文字列をコピーするには、イベント ハブ自体ではなく、名前空間#create-an-event-hubs-namespace)の [接続情報] をクリックします。Copy this connection string by clicking the Connection Information button for the namespace#create-an-event-hubs-namespace), not the event hub itself. この接続文字列には、トリガーをアクティブにするために少なくとも読み取りアクセス許可が必要です。This connection string must have at least read permissions to activate the trigger.
pathpath EventHubNameEventHubName イベント ハブの名前。The name of the event hub. アプリ設定を介して参照できます %eventHubName%Can be referenced via app settings %eventHubName%

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

トリガー - イベント メタデータTrigger - event metadata

Event Hubs トリガーには、いくつかのメタデータ プロパティがあります。The Event Hubs trigger provides several metadata properties. これらのプロパティは、他のバインドのバインド式の一部として、またはコードのパラメーターとして使用できます。These properties can be used as part of binding expressions in other bindings or as parameters in your code. これらは EventData クラスのプロパティです。These are properties of the EventData class.

プロパティProperty typeType 説明Description
PartitionContext PartitionContextPartitionContext PartitionContext インスタンス。The PartitionContext instance.
EnqueuedTimeUtc DateTime エンキューされた時刻 (UTC)。The enqueued time in UTC.
Offset string イベント ハブ パーティション ストリームを基準としたデータのオフセット。The offset of the data relative to the Event Hub partition stream. オフセットは、Event Hubs ストリーム内のイベントのマーカーまたは識別子です。The offset is a marker or identifier for an event within the Event Hubs stream. この識別子は、Event Hubs ストリームのパーティション内で一意です。The identifier is unique within a partition of the Event Hubs stream.
PartitionKey string イベント データを送信するパーティション。The partition to which event data should be sent.
Properties IDictionary<String,Object> イベント データのユーザー プロパティ。The user properties of the event data.
SequenceNumber Int64 イベントの論理シーケンス番号。The logical sequence number of the event.
SystemProperties IDictionary<String,Object> イベント データなどのシステム プロパティ。The system properties, including the event data.

この記事の前半でこれらのプロパティを使用しているコード例を参照してください。See code examples that use these properties earlier in this article.

トリガー - host.json のプロパティTrigger - host.json properties

host.json ファイルには、Event Hubs トリガーの動作を制御する設定が含まれています。The host.json file contains settings that control Event Hubs trigger behavior.

{
    "eventHub": {
      "maxBatchSize": 64,
      "prefetchCount": 256,
      "batchCheckpointFrequency": 1
    }
}
プロパティProperty 既定値Default 説明Description
maxBatchSizemaxBatchSize 6464 受信ループあたりで受信される最大イベント数。The maximum event count received per receive loop.
prefetchCountprefetchCount 該当なしn/a 基になる EventProcessorHost に使用される既定の PrefetchCount。The default PrefetchCount that will be used by the underlying EventProcessorHost.
batchCheckpointFrequencybatchCheckpointFrequency 11 EventHub カーソル チェックポイントを作成する前に処理するイベント バッチ数。The number of event batches to process before creating an EventHub cursor checkpoint.

出力Output

Event Hubs 出力バインドを使用して、イベント ストリームにイベントを書き込みます。Use the Event Hubs output binding to write events to an event stream. イベントを書き込むには、イベント ハブへの送信アクセス許可が必要です。You must have send permission to an event hub to write events to it.

必要なパッケージ参照が用意されていることを確認します:Functions 1.x または Functions 2.xEnsure the required package references are in place: Functions 1.x or Functions 2.x

出力 - 例Output - example

言語固有の例をご覧ください。See the language-specific example:

出力 - C# の例Output - C# example

次の例は、メソッドの戻り値を出力として使用してメッセージをイベント ハブに書き込む C# 関数を示しています。The following example shows a C# function that writes a message to an event hub, using the method return value as the output:

[FunctionName("EventHubOutput")]
[return: EventHub("outputEventHubMessage", Connection = "EventHubConnectionAppSetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    return $"{DateTime.Now}";
}

出力 - C# スクリプトの例Output - C# script example

次の例は、function.json ファイルのイベント ハブ トリガー バインドと、そのバインドが使用される C# スクリプト関数を示しています。The following example shows an event hub trigger binding in a function.json file and a C# script function that uses the binding. この関数では、メッセージをイベント ハブに書き込みます。The function writes a message to an event hub.

次の例は、function.json ファイル内の Event Hubs バインディング データを示しています。The following examples show Event Hubs binding data in the function.json file. 最初の例は Functions 2.x 用で、2 つ目の例は Functions 1.x 用です。The first example is for Functions 2.x, and the second one is for Functions 1.x.

{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}
{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "path": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

1 つのメッセージを作成する C# スクリプト コードを次に示します。Here's C# script code that creates one message:

using System;
using Microsoft.Extensions.Logging;

public static void Run(TimerInfo myTimer, out string outputEventHubMessage, ILogger log)
{
    String msg = $"TimerTriggerCSharp1 executed at: {DateTime.Now}";
    log.LogInformation(msg);   
    outputEventHubMessage = msg;
}

複数のメッセージを作成する C# スクリプト コードを次に示します。Here's C# script code that creates multiple messages:

public static void Run(TimerInfo myTimer, ICollector<string> outputEventHubMessage, ILogger log)
{
    string message = $"Message created at: {DateTime.Now}";
    log.LogInformation(message);
    outputEventHubMessage.Add("1 " + message);
    outputEventHubMessage.Add("2 " + message);
}

出力 - F# の例Output - F# example

次の例は、function.json ファイルのイベント ハブ トリガー バインドと、そのバインドが使用される F# 関数を示しています。The following example shows an event hub trigger binding in a function.json file and an F# function that uses the binding. この関数では、メッセージをイベント ハブに書き込みます。The function writes a message to an event hub.

次の例は、function.json ファイル内の Event Hubs バインディング データを示しています。The following examples show Event Hubs binding data in the function.json file. 最初の例は Functions 2.x 用で、2 つ目の例は Functions 1.x 用です。The first example is for Functions 2.x, and the second one is for Functions 1.x.

{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}
{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "path": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

F# コードを次に示します。Here's the F# code:

let Run(myTimer: TimerInfo, outputEventHubMessage: byref<string>, log: ILogger) =
    let msg = sprintf "TimerTriggerFSharp1 executed at: %s" DateTime.Now.ToString()
    log.LogInformation(msg);
    outputEventHubMessage <- msg;

出力 - JavaScript の例Output - JavaScript example

次の例は、function.json ファイルのイベント ハブ トリガー バインドと、そのバインドが使用される JavaScript 関数を示しています。The following example shows an event hub trigger binding in a function.json file and a JavaScript function that uses the binding. この関数では、メッセージをイベント ハブに書き込みます。The function writes a message to an event hub.

次の例は、function.json ファイル内の Event Hubs バインディング データを示しています。The following examples show Event Hubs binding data in the function.json file. 最初の例は Functions 2.x 用で、2 つ目の例は Functions 1.x 用です。The first example is for Functions 2.x, and the second one is for Functions 1.x.

{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}
{
    "type": "eventHub",
    "name": "outputEventHubMessage",
    "path": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

1 つのメッセージを送信する JavaScript コードを次に示します。Here's JavaScript code that sends a single message:

module.exports = function (context, myTimer) {
    var timeStamp = new Date().toISOString();
    context.log('Message created at: ', timeStamp);   
    context.bindings.outputEventHubMessage = "Message created at: " + timeStamp;
    context.done();
};

複数のメッセージを送信する JavaScript コードを次に示します。Here's JavaScript code that sends multiple messages:

module.exports = function(context) {
    var timeStamp = new Date().toISOString();
    var message = 'Message created at: ' + timeStamp;

    context.bindings.outputEventHubMessage = [];

    context.bindings.outputEventHubMessage.push("1 " + message);
    context.bindings.outputEventHubMessage.push("2 " + message);
    context.done();
};

出力 - Python の例Output - Python example

次の例は、function.json ファイルのイベント ハブ トリガー バインドと、そのバインドが使用される Python 関数を示しています。The following example shows an event hub trigger binding in a function.json file and a Python function that uses the binding. この関数では、メッセージをイベント ハブに書き込みます。The function writes a message to an event hub.

次の例は、function.json ファイル内の Event Hubs バインディング データを示しています。The following examples show Event Hubs binding data in the function.json file.

{
    "type": "eventHub",
    "name": "$return",
    "eventHubName": "myeventhub",
    "connection": "MyEventHubSendAppSetting",
    "direction": "out"
}

1 つのメッセージを送信する Python コードを次に示します。Here's Python code that sends a single message:

import datetime
import logging
import azure.functions as func

def main(timer: func.TimerRequest) -> str:
    timestamp = datetime.datetime.utcnow()
    logging.info('Message created at: %s', timestamp);   
    return 'Message created at: {}'.format(timestamp)

出力 - Java の例Output - Java example

次の例は、現在の時刻を含むメッセージを Event Hub に書き込む Java 関数を示しています。The following example shows a Java function that writes a message contianing the current time to an Event Hub.

@}FunctionName("sendTime")
@EventHubOutput(name = "event", eventHubName = "samples-workitems", connection = "AzureEventHubConnection")
public String sendTime(
   @TimerTrigger(name = "sendTimeTrigger", schedule = "0 *&#47;5 * * * *") String timerInfo)  {
     return LocalDateTime.now().toString();
 }

Java 関数ランタイム ライブラリで、その値が Event Hub に公開されるパラメーター上で @EventHubOutput 注釈を使用します。In the Java functions runtime library, use the @EventHubOutput annotation on parameters whose value would be published to Event Hub. パラメーターの型は OutputBinding<T> にする必要があります。T は POJO または Java の任意のネイティブ型です。The parameter should be of type OutputBinding<T> , where T is a POJO or any native Java type.

出力 - 属性Output - attributes

C# クラス ライブラリでは、EventHubAttribute 属性を使用します。For C# class libraries, use the EventHubAttribute attribute.

この属性のコンストラクターは、イベント ハブの名前のほか、接続文字列が含まれたアプリ設定の名前を受け取ります。The attribute's constructor takes the name of the event hub and the name of an app setting that contains the connection string. これらの設定の詳細については、「出力 - 構成」を参照してください。For more information about these settings, see Output - configuration. EventHub 属性の例を次に示します。Here's an EventHub attribute example:

[FunctionName("EventHubOutput")]
[return: EventHub("outputEventHubMessage", Connection = "EventHubConnectionAppSetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    ...
}

完全な例については、「出力 - C# の例」を参照してください。For a complete example, see Output - C# example.

出力 - 構成Output - configuration

次の表は、function.json ファイルと EventHub 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the EventHub attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a "eventHub" に設定する必要があります。Must be set to "eventHub".
directiondirection 該当なしn/a "out" に設定する必要があります。Must be set to "out". このパラメーターは、Azure Portal でバインドを作成するときに自動で設定されます。This parameter is set automatically when you create the binding in the Azure portal.
namename 該当なしn/a イベントを表す関数コードに使用される変数の名前。The variable name used in function code that represents the event.
pathpath EventHubNameEventHubName Functions 1.x のみ。Functions 1.x only. イベント ハブの名前。The name of the event hub. イベント ハブの名前は接続文字列にも存在し、その値が実行時にこのプロパティをオーバーライドします。When the event hub name is also present in the connection string, that value overrides this property at runtime.
eventHubNameeventHubName EventHubNameEventHubName Functions 2.x のみ。Functions 2.x only. イベント ハブの名前。The name of the event hub. イベント ハブの名前は接続文字列にも存在し、その値が実行時にこのプロパティをオーバーライドします。When the event hub name is also present in the connection string, that value overrides this property at runtime.
connectionconnection ConnectionConnection イベント ハブの名前空間への接続文字列が含まれたアプリ設定の名前。The name of an app setting that contains the connection string to the event hub's namespace. この接続文字列をコピーするには、イベント ハブ自体ではなく、"名前空間" の [接続情報] をクリックします。Copy this connection string by clicking the Connection Information button for the namespace, not the event hub itself. この接続文字列には、イベント ストリームにメッセージを送信するための送信アクセス許可が必要です。This connection string must have send permissions to send the message to the event stream.

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

出力 - 使用方法Output - usage

C# および C# スクリプトでは、out string paramName などのメソッド パラメーターを使用してメッセージを送信します。In C# and C# script, send messages by using a method parameter such as out string paramName. C# スクリプトでは、paramNamefunction.jsonname プロパティで指定された値です。In C# script, paramName is the value specified in the name property of function.json. 複数のメッセージを書き込むには、out string の代わりに ICollector<string> または IAsyncCollector<string> を使用します。To write multiple messages, you can use ICollector<string> or IAsyncCollector<string> in place of out string.

JavaScript では、context.bindings.<name> を使用して出力イベントにアクセスします。In JavaScript, access the output event by using context.bindings.<name>. <name>function.jsonname プロパティで指定された値です。<name> is the value specified in the name property of function.json.

例外とリターン コードExceptions and return codes

バインドBinding リファレンスReference
イベント ハブEvent Hub 運用ガイドOperations Guide

host.json 設定host.json settings

このセクションでは、バージョン 2.x でこのバインディングに使用可能なグローバル構成設定について説明します。This section describes the global configuration settings available for this binding in version 2.x. 次の host.json ファイルの例には、このバインディングのバージョン 2.x の設定のみが含まれています。The example host.json file below contains only the version 2.x settings for this binding. バージョン 2.x でのグローバル構成設定の詳細については、Azure Functions バージョン 2.x の host.json のリファレンスを参照してください。For more information about global configuration settings in version 2.x, see host.json reference for Azure Functions version 2.x.

注意

Functions 1.x の host.json のリファレンスについては、「host.json reference for Azure Functions 1.x (Azure Functions 1.x の host.json のリファレンス)」を参照してください。For a reference of host.json in Functions 1.x, see host.json reference for Azure Functions 1.x.

{
    "version": "2.0",
    "extensions": {
        "eventHubs": {
            "batchCheckpointFrequency": 5,
            "eventProcessorOptions": {
                "maxBatchSize": 256,
                "prefetchCount": 512
            }
        }
    }
}  
プロパティProperty 既定値Default 説明Description
maxBatchSizemaxBatchSize 6464 受信ループあたりで受信される最大イベント数。The maximum event count received per receive loop.
prefetchCountprefetchCount 該当なしn/a 基になる EventProcessorHost に使用される既定の PrefetchCount。The default PrefetchCount that will be used by the underlying EventProcessorHost.
batchCheckpointFrequencybatchCheckpointFrequency 11 EventHub カーソル チェックポイントを作成する前に処理するイベント バッチ数。The number of event batches to process before creating an EventHub cursor checkpoint.

次の手順Next steps