イベントの再試行ポリシーとデッドレターキューの使用 - Amazon EventBridge

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

イベントの再試行ポリシーとデッドレターキューの使用

イベントが、ルールで指定されたターゲットに正常に配信されないことがあります。これは、たとえば、ターゲットリソースが使用できない場合や、EventBridge にターゲットリソースへのアクセス権限がない場合、またはネットワーク状態が原因である場合に発生します。イベントがターゲットに正常に配信されない場合、EventBridge はイベントの送信を再試行します。リトライの試行時間と回数は、ポリシーを再試行する設定をターゲットに設定します。デフォルトでは、EventBridge はイベントの送信を 24 時間、最大 185 回再試行します。指数関数的なバックオフとジッタ(ランダム化遅延)。すべての再試行が試行される前にイベントが配信されない場合、そのイベントはドロップされ、EventBridge はその処理を続行しません。ターゲットへの配信に失敗したイベントが失われるのを避けるために、デッドレターキュー(DLQ)を設定し、失敗したイベントをすべてイベントキューに送信して、後で処理します。

EventBridge DLQ は、ターゲットに正常に配信できなかったイベントを格納するために EventBridge が使用する標準の Amazon SQS キューです。ルールを作成してターゲットを追加するときに、DLQ を使用するかどうかを選択できます。DLQ を構成すると、正常に配信されなかったイベントを保持できます。これにより、呼び出しに失敗した問題を解決し、後でイベントを処理できます。

すべてのイベントエラーが同じ方法で処理されるわけではありません。一部のイベントは、再試行を行わずにドロップされるか、DLQ に送信されます。たとえば、ターゲットへのアクセス許可の欠落またはターゲットリソースが存在しないために発生したエラーの場合、根本的な問題を解決するためのアクションが実行されるまで、すべての再試行は失敗します。EventBridge は、配信が失敗すると、これらのイベントを DLQ に直接送信します(設定されている場合)。

イベントがターゲットに正常に配信されなかった場合、EventBridge は Amazon CloudWatch メトリックスにイベントを発行します。これには、ターゲットの呼び出しが失敗したことを示します。DLQ を使用する場合、追加のメトリックスが CloudWatch に送信されます。InvocationsSentToDLQおよびInvocationsFailedToBeSentToDLQ。EventBridge メトリクスの詳細については、Amazon EventBridge モニタリング

デッドレターキューの使用に関する考慮事項

EventBridge に DLQ を設定する場合は、次の点を考慮してください。

  • のみ標準キューがサポートされています。EventBridge で DLQ に FIFO キューを使用することはできません。

  • EventBridge には、エラーコード、エラーメッセージ、枯渇した再試行条件、ルール ARN、再試行試行、ターゲット ARN など、イベントメタデータとメッセージ属性がメッセージに含まれます。これらの値を使用して、イベントと障害の原因を特定します。

  • 同じアカウントの DLQ に対するアクセス許可:

    • コンソールを使用してルールにターゲットを追加し、同じアカウントで Amazon SQS キューを選択した場合、キューへの EventBridge アクセスを許可するリソースベースのポリシーが、キューにアタッチされます。

    • 使用する場合PutTargetsオペレーションを使用してルールのターゲットを追加または更新し、同じアカウントで Amazon SQS キューを選択した場合は、選択したキューにアクセス許可を手動で付与する必要があります。詳細については、「デッドレターキューへのアクセス許可を与える」を参照してください。

  • 異なる AWS アカウントから Amazon SQS キューを使用するためのアクセス許可。

    • コンソールからルールを作成する場合、他のアカウントのキューは選択できません。他のアカウントのキューの ARN を指定し、リソースベースのポリシーを手動でアタッチして、キューにアクセス許可を付与する必要があります。詳細については、「デッドレターキューへのアクセス許可を与える」を参照してください。

    • API を使用してルールを作成する場合、デッドレターキューとして使用される別のアカウントの SQS キューにリソースベースのポリシーを手動でアタッチする必要があります。詳細については、「デッドレターキューへのアクセス許可を与える」を参照してください。

  • 使用する Amazon SQS キューは、ルールを作成するリージョンと同じリージョンに存在する必要があります。

デッドレターキューへのアクセス許可を与える

ルールのターゲットに DLQ を設定すると、EventBridge は呼び出しに失敗したイベントを選択した Amazon SQS キューに送信します。イベントをキューに正常に配信するには、EventBridge に、そのための許可を得る必要があります。ルールのターゲットを構成し、EventBridge コンソールを使用して DLQ を選択すると、権限が自動的に追加されます。API を使用してルールを作成する場合、または別の AWS アカウントにあるキューを使用する場合は、必要なアクセス権限を付与するリソースベースのポリシーを手動で作成し、キューにアタッチする必要があります。

以下のリソースベースのポリシーは、EventBridge が Amazon SQS キューにイベントメッセージを送信するために必要なアクセス権限を付与する方法を示しています。このポリシーの例では、EventBridge サービスにSendMessage操作を使用して、「MyEventDLQ」という名前のキューにメッセージを送信します。キューは、AWS アカウント 123456789012 の us-west-2 リージョンに存在する必要があります。-Conditionステートメントでは、AWS アカウント 123456789012 の us-west-2 リージョンで作成された「MyTestRule」という名前のルールからのリクエストのみが許可されます。

{ "Sid": "Dead-letter queue permissions", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-2:123456789012:MyEventDLQ", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:us-west-2:123456789012:rule/MyTestRule" } } }

ポリシーをキューにアタッチするには、Amazon SQS コンソールを使用してキューを開き、アクセスポリシーをクリックし、ポリシーを編集します。また、AWS CLI を使用して、詳細については、「」を参照してください。Amazon SQS のアクセス許可

デッドレターキューからイベントを再送信する方法

メッセージを DLQ から移動するには、次の 2 つの方法があります。

  • Amazon SQS コンシューマロジックの作成を避ける — DLQ をイベントソースとして Lambda 関数に設定して、DLQ を消費します。

  • Amazon SQS コンシューマロジックの作成 — Amazon SQS API、AWS SDK、または AWS CLI を使用して、DLQ 内のメッセージのポーリング、処理、削除を行うカスタムコンシューマーロジックを記述します。