.NET 用 Azure WebJobs EventGrid クライアント ライブラリ - バージョン 3.3.0

この拡張機能は、Azure Functionsで Event Grid Webhook 呼び出しを受信するための機能を提供します。これにより、Event Grid に発行されたイベントに応答する関数を簡単に記述できます。

作業の開始

パッケージをインストールする

NuGet を使用して Event Grid 拡張機能をインストールします。

dotnet add package Microsoft.Azure.WebJobs.Extensions.EventGrid

前提条件

カスタム Event Grid トピックまたはドメインを持つ Azure サブスクリプション と Azure リソース グループが必要です。 この手順に従って、Event Grid リソース プロバイダーを登録し、Azure portalを使用して Event Grid トピックを作成します。 Azure CLI を使用した同様のチュートリアルがあります。

クライアントの認証

拡張機能でイベントを発行するには、Event Grid トピックの と、トピックのアクセス キーをcredential使用して作成できる が必要endpointです。

Event Grid トピックのエンドポイントは、 Azure Portal または以下の Azure CLI スニペットを使用して確認できます。

az eventgrid topic show --name <your-resource-name> --resource-group <your-resource-group-name> --query "endpoint"

アクセス キーは、 ポータルから、または次の Azure CLI スニペットを使用して見つけることもできます。

az eventgrid topic key list --name <your-resource-name> --resource-group <your-resource-group-name> --query "key1"

主要な概念

Event Grid 出力バインドの使用

この拡張機能を使用して EventGrid イベントを発行する方法については、 バインドのチュートリアル に従ってください。

Event Grid トリガーの使用

イベントが発行されたときに Azure 関数をトリガーする方法については、 チュートリアル に従ってください。

Event Grid 出力バインドを使用する関数

トピックに EventGrid スキーマを使用している場合は、EventGridEvents を出力できます。

public static class EventGridEventBindingFunction
{
    [FunctionName("EventGridEventBindingFunction")]
    public static async Task<IActionResult> RunAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        [EventGrid(TopicEndpointUri = "EventGridEndpoint", TopicKeySetting = "EventGridKey")] IAsyncCollector<EventGridEvent> eventCollector)
    {
        EventGridEvent e = new EventGridEvent(await req.ReadAsStringAsync(), "IncomingRequest", "IncomingRequest", "1.0.0");
        await eventCollector.AddAsync(e);
        return new OkResult();
    }
}

トピックに CloudEvent スキーマを使用している場合は、CloudEvents を出力できます。

public static class CloudEventBindingFunction
{
    [FunctionName("CloudEventBindingFunction")]
    public static async Task<IActionResult> RunAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        [EventGrid(TopicEndpointUri = "EventGridEndpoint", TopicKeySetting = "EventGridKey")] IAsyncCollector<CloudEvent> eventCollector)
    {
        CloudEvent e = new CloudEvent("IncomingRequest", "IncomingRequest", await req.ReadAsStringAsync());
        await eventCollector.AddAsync(e);
        return new OkResult();
    }
}

出力バインディングで Azure Identity を使用することもできます。 これを行うには、 プロパティを Connection 、Event Grid トピック エンドポイントを含むアプリ設定の名前と、 ここで詳しく説明されているオプションの ID 情報のセットに設定します。 プロパティをConnection設定するときは、 プロパティと TopicKeySetting プロパティをTopicEndpointUri設定しないでください。

public static class CloudEventOutputBindingWithIdentityFunction
{
    [FunctionName("CloudEventOutputBindingWithIdentityFunction")]
    public static async Task<IActionResult> RunAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        [EventGrid(Connection = "MyConnection")] IAsyncCollector<CloudEvent> eventCollector)
    {
        CloudEvent e = new CloudEvent("IncomingRequest", "IncomingRequest", await req.ReadAsStringAsync());
        await eventCollector.AddAsync(e);
        return new OkResult();
    }
}

ローカル開発の場合は、 ファイルを local.settings.json 使用して接続情報を格納します。

{
  "Values": {
    "myConnection__topicEndpointUri": "{topicEndpointUri}"
  }
}

デプロイ時に、 アプリケーション設定 を使用してこの情報を格納します。

文字列または JObject を出力することもできます。拡張機能は、正しい厳密に型指定されたイベントへの解析を試みます。

Event Grid トリガーを使用する関数

イベントがトピックに配信されるたびに実行される関数を作成することもできます。 Azure Function イベント サブスクリプションに対して選択したスキーマに応じて、 または CloudEventのいずれかにEventGridEventバインドできます。

public static class EventGridEventTriggerFunction
{
    [FunctionName("EventGridEventTriggerFunction")]
    public static void Run(
        ILogger logger,
        [EventGridTrigger] EventGridEvent e)
    {
        logger.LogInformation("Event received {type} {subject}", e.EventType, e.Subject);
    }
}

また、サブスクリプションが CloudEvent スキーマで構成されている場合は、次のようにします。

public static class CloudEventTriggerFunction
{
    [FunctionName("CloudEventTriggerFunction")]
    public static void Run(
        ILogger logger,
        [EventGridTrigger] CloudEvent e)
    {
        logger.LogInformation("Event received {type} {subject}", e.Type, e.Subject);
    }
}

イベントの配列にバインドすることもできます。 これは、Event Grid サブスクリプション に対してバッチ処理が有効になっている 場合に便利です。

public static class EventGridEventBatchTriggerFunction
{
    [FunctionName("EventGridEventBatchTriggerFunction")]
    public static void Run(
        ILogger logger,
        [EventGridTrigger] EventGridEvent[] events)
    {
        foreach (EventGridEvent eventGridEvent in events)
        {
            logger.LogInformation("Event received {type} {subject}", eventGridEvent.EventType, eventGridEvent.Subject);
        }
    }
}

同様に、CloudEvent スキーマで構成されたサブスクリプションの場合:

public static class CloudEventBatchTriggerFunction
{
    [FunctionName("CloudEventBatchTriggerFunction")]
    public static void Run(
        ILogger logger,
        [EventGridTrigger] CloudEvent[] events)
    {
        foreach (CloudEvent cloudEvent in events)
        {
            logger.LogInformation("Event received {type} {subject}", cloudEvent.Type, cloudEvent.Subject);
        }
    }
}

トラブルシューティング

トラブルシューティングのガイダンスについては、「Azure Functionsの監視」を参照してください。

次のステップ

Azure 関数の概要または Azure 関数の作成に関するガイドを参照してください

共同作成

このライブラリのビルド、テスト、および投稿の詳細については、 CONTRIBUTING.md を参照してください。

このプロジェクトでは、共同作成と提案を歓迎しています。 ほとんどの共同作成では、共同作成者使用許諾契約書 (CLA) にご同意いただき、ご自身の共同作成内容を使用する権利を Microsoft に供与する権利をお持ちであり、かつ実際に供与することを宣言していただく必要があります。 詳細については、「 cla.microsoft.com」を参照してください。

このプロジェクトでは、Microsoft オープン ソースの倫理規定を採用しています。 詳しくは、「Code of Conduct FAQ (倫理規定についてよくある質問)」を参照するか、opencode@microsoft.com 宛てに質問またはコメントをお送りください。

インプレッション数