EventBridge で配信されていないイベントを処理するためのデッドレターキューの使用 - Amazon EventBridge

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

EventBridge で配信されていないイベントを処理するためのデッドレターキューの使用

ターゲットへの配信に失敗した後でイベントが失われるのを避けるために、デッドレターキュー (DLQ) を設定し、失敗したすべてのイベントをそこに送って後で処理することができます。

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

ルールのターゲットに DLQ を設定すると、EventBridge は呼び出しに失敗したイベントを、選択した Amazon SQS キューに送信します。

イベントエラーには、さまざまな処理方法があります。一部のイベントは、再試行せずに削除されるか、DLQ に送信されます。例えば、ターゲットに対するアクセス許可が欠落したことに起因するエラーの場合、または存在しなくなったターゲットリソースの場合、根本的な問題を解決するためのアクションが実行されるまで再試行は行われません。 EventBridge は、指定されている場合、これらのイベントをターゲット DLQ に直接送信します。

イベント配信が失敗すると、EventBridge はターゲット invocation が失敗したことを示す Amazon CloudWatch メトリックスにイベントをパブリッシュします。DLQ を使用している場合、InvocationsSentToDLQ および InvocationsFailedToBeSentToDLQ を含めて追加のメトリクスが CloudWatch に送信されます。

を使用して保管中のイベントを暗号化する場合は、イベントバス AWS KMS カスタマーマネージドキー の DLQs を指定することもできます。詳細については、「EventBridge で暗号化されたイベントエラーをキャプチャするためのデッドレターキューの使用」を参照してください。

DLQ の各メッセージには、次のカスタム属性が含まれます。

  • RULE_ARN

  • TARGET_ARN

  • ERROR_CODE

    以下は、DLQ が返す可能性のあるエラーコードのサンプルです。

    • CONNECTION_FAILURE

    • CROSS_ACCOUNT_INGESTION_FAILED

    • CROSS_REGION_INGESTION_FAILED

    • ERROR_FROM_TARGET

    • EVENTS_IN_BATCH_REQUEST_REJECTED

    • EVENTS_IN_BATCH_REQUEST_REJECTED

    • FAILED_TO_ASSUME_ROLE

    • INTERNAL_ERROR

    • INVALID_JSON

    • INVALID_PARAMETER

    • NO_PERMISSIONS

    • NO_RESOURCE

    • RESOURCE_ALREADY_EXISTS

    • RESOURCE_LIMIT_EXCEEDED

    • RESOURCE_MODIFICATION_COLLISION

    • SDK_CLIENT_ERROR

    • THIRD_ACCOUNT_HOP_DETECTED

    • THIRD_REGION_HOP_DETECTED

    • THROTTLING

    • TIMEOUT

    • TRANSIENT_ASSUME_ROLE

    • UNKNOWN

  • ERROR_MESSAGE

  • EXHAUSTED_RETRY_CONDITION

    次の条件が返されることがあります。

    • MaximumRetryAttempts

    • MaximumEventAgeInSeconds

  • RETRY_ATTEMPTS

次のビデオでは、DLQ の設定について説明します。

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

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

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

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

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

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

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

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

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

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

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

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

イベントをキューに正常に配信するには、そのためのアクセス許可が Eventbridge に必要です。EventBridge コンソールを使用して DLQ を指定すると、アクセス許可が自動的に追加されます。これには、以下が含まれます。

API を使用してルールを作成する場合、または別の AWS アカウントにあるキューを使用する場合、必要なアクセス許可を付与するリソースベースのポリシーを手動で作成し、それをキューにアタッチする必要があります。

ターゲットデッドレターキューのアクセス許可の例

以下のリソースベースのポリシーは、EventBridge が Amazon SQS キューにイベントメッセージを送信する際に必要なアクセス許可を付与する方法を示しています。このポリシーの例では、「MyEventDLQ」という名前のキューにメッセージを送信するために、SendMessage オペレーションを使用するアクセス許可を EventBridge サービスに付与しています。キューは、 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" } } }

イベントバスのデッドレターキューのアクセス許可の例

次のリソースベースのポリシーは、イベントバスの DLQ を指定するときに必要なアクセス許可を付与する方法を示しています。この場合、aws:SourceArn は DLQ にイベントを送信するイベントバスの ARN を指定します。この例では、キューはイベントバスと同じリージョンにある必要があります。

{ "Sid": "Dead-letter queue permissions", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:region:account-id:queue-name", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region:account-id:event-bus/event-bus-arn" } } }

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

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

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

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

  • Amazon SQS コンシューマーロジックの書き込み – Amazon SQS API、 AWS SDK、または AWS CLI を使用して、DLQ 内のメッセージをポーリング、処理、削除するためのカスタムコンシューマーロジックを書き込みます。