Event Gridから処理時間の長いFunctionsをトリガ時の再試行停止について

五味 久和 0 評価のポイント
2025-11-27T11:36:04.15+00:00

Blobストレージにファイルが配置されたことを検知し、Event GridからAzure Functionsをトリガーする処理を実装しています。Functions内ではファイルの編集を行い、その後BlobからADLS Gen2へファイルをコピーしています。

Event Gridは、トリガー後30秒以内に応答がない場合に再試行を行う仕様と認識していますが、対象ファイルのサイズが大きい場合にFunctionsの処理に30秒以上かかるケースがあります。

そのため、Event Grid側の再試行を防ぐ目的で、「イベント配信の最大試行回数」を1回に設定して対応を進めております。この設定の場合、Event Gridは30秒以内に応答がないためエラー扱いとなり、Functionsは30秒以上かけて正常終了する挙動となります。

処理の成功可否についてはFunctionsのログを監視することで検知する想定ですが、Event Gridを再試行させないことによる弊害や懸念点などがあればご教示いただけるでしょうか。

Azure Event Grid
Azure Event Grid

高可用性、一貫性のあるパフォーマンス、動的スケールを目的として設計された Azure イベント ルーティング サービス。


1 件の回答

並べ替え方法: 最も役に立つ
  1. Siddhesh Desai 8,210 評価のポイント Microsoft 外部スタッフ モデレーター
    2025-11-27T12:21:14.2166667+00:00

    Hi @五味 久和 •

    Microsoft Q&A にお問い合わせいただきありがとうございます。

    ファイルが到着したらすぐに確認応答するように、Event Grid関数を構成する必要があります。

    Event Gridトリガー関数で、ファイルがBLOBに格納されたらすぐに

    イベントをすぐに検証する

    BLOBのURLとメタデータを抽出する

    メッセージを永続キュー(Azure Storage QueueまたはService Bus)にエンキューする

    HTTP 200 OKをすぐに(数秒以内に)返す

    これにより、Event Gridの30秒応答要件が満たされます。

    ワーカー関数(キュートリガー)

    メッセージを取得し、次の処理を実行します。

    BLOBをダウンロード/編集する

    ADLS Gen2にコピーし、再試行とべき等性を処理する イベントを即座に確認応答する例を以下に示します。

    [FunctionName("EventGridHandler")]
    public async Task<IActionResult> Run(
    [EventGridTrigger] EventGridEvent eventGridEvent,
    [Queue("file-work-items")] IAsyncCollector<string> queueCollector,
    ILogger log)
    {
    var blobUrl = eventGridEvent.Data.ToString();
    await queueCollector.AddAsync(blobUrl);
    return new OkResult return new OkResult(); // 直ちに確認応答
    
    
    

    Event Gridの再試行が無効になっている場合(最大試行回数 = 1)の影響

    イベントの損失:一時的な障害またはコールドスタートが発生すると、イベントは永久に失われます。

    自動回復なし:障害はご自身で処理する必要があります。

    監視が重要になります:成功/失敗の追跡はログに依存します。

    DLQが必要:デッドレターキューがないと、失敗したイベントは消えてしまいます。

    実施した対策

    失敗したイベントをキャプチャするために、デッドレターキューを有効にします。

    再生中の重複を回避するために、イベントIDとBLOB ETagを使用してべき等性を追加します。

    Application InsightsまたはLog Analyticsで監視とアラートを設定します。

    デッドレターキューイベントの再生戦略を計画します。

    コールドスタートのリスクを軽減するために、Premium/Flexプランを使用します。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません

お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "推奨" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。