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

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

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

ターゲットに配信できなかったイベントが失われないようにするには、デッドレターキュー (DLQ) を設定し、失敗したイベントをすべて送信して後で処理できます。

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

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

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

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

を使用して保管中のイベント 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

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

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

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

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

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

  • 同じアカウントDLQs内の のアクセス許可:

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

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

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

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

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

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

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

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

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

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

次のリソースベースのポリシーは、Amazon SQSキューにイベントメッセージを送信 EventBridge するために必要なアクセス許可を に付与する方法を示しています。ポリシー例では、SendMessageオペレーションを使用してMyEventDLQ「」という名前のキューにメッセージを送信するための 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イベントバスに を指定するときに必要なアクセス許可を付与する方法を示しています。この場合、 はイベントを に送信するイベントバスARNの aws:SourceArnを指定しますDLQ。この例では、キューはイベントバスと同じリージョンにある必要があります。

{ "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コンソールを使用してキューを開き、アクセスポリシーを選択してポリシーを編集します。また、 AWS CLIを使用することもできます 詳細については、「Amazon アクセスSQS許可」を参照してください。

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

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

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

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