이벤트 전송 디버깅 - 아마존 EventBridge

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

이벤트 전송 디버깅

이벤트 전송 문제는 식별하기 어려울 수 있으므로 이벤트 전송 실패를 디버깅하고 복구할 수 있는 몇 가지 방법을 EventBridge 제공합니다.

이벤트 전송을 EventBridge 재시도하는 방법

규칙에 지정된 대상이벤트가 성공적으로 전달되지 않는 경우가 있습니다. 이런 일이 발생할 수 있습니다. 예를 들면 다음과 같습니다.

  • 대상 리소스를 사용할 수 없는 경우

  • 네트워크 상황으로 인해

재시도 가능한 오류로 인해 이벤트가 대상에 성공적으로 전달되지 않으면 이벤트 전송을 EventBridge 재시도합니다. 대상의 재시도 정책 설정에서 시도 시간 및 재시도 횟수를 설정합니다. 기본적으로 이벤트 전송을 24시간 동안 최대 185회까지 EventBridge 재시도합니다. 이때 백오프와 지터가 기하급수적으로 발생하거나 임의 지연이 발생합니다.

모든 재시도 횟수를 모두 사용한 후에도 이벤트가 전달되지 않으면 이벤트가 삭제되고 계속 처리되지 않습니다. EventBridge

데드레터 대기열을 사용하여 전달되지 않은 이벤트를 처리합니다.

대상으로 전달되지 않는 이벤트가 손실되지 않도록 DLQ(Dead Letter Queue)를 구성하고 실패한 모든 이벤트를 이 대기열로 전송하여 나중에 처리할 수 있습니다.

EventBridge DLQ는 대상에 성공적으로 전송되지 못한 이벤트를 저장하는 데 사용하는 표준 Amazon SQS EventBridge 대기열입니다. 규칙을 생성하고 대상을 추가할 때 DLQ 사용 여부를 선택할 수 있습니다. DLQ를 구성하면 성공적으로 전송되지 않은 모든 이벤트를 유지할 수 있습니다. 그러면 이벤트 전송 실패로 이어진 문제를 해결하고 나중에 이벤트를 처리할 수 있습니다.

규칙의 대상에 대해 DLQ를 구성하는 경우, 호출이 실패한 이벤트를 선택한 Amazon SQS 대기열로 EventBridge 전송합니다.

이벤트 오류는 다양한 방식으로 처리됩니다. 재시도 없이 일부 이벤트가 삭제되거나 DLQ로 전송됩니다. 예를 들어 대상에 대한 권한 누락이나 더 이상 존재하지 않는 대상 리소스로 인해 발생한 오류의 경우, 기본 문제를 해결하기 위한 조치가 취해질 때까지 모든 재시도가 실패합니다. DLQ가 있는 경우 다시 시도하지 말고 DLQ로 직접 이벤트를 EventBridge 전송하십시오.

이벤트 전송이 실패하면 대상이 invocation 실패했음을 나타내는 이벤트를 Amazon CloudWatch 지표에 EventBridge 게시합니다. DLQ를 사용하는 경우 및 를 CloudWatch 포함하여 InvocationsSentToDLQ 추가 지표가 전송됩니다. InvocationsFailedToBeSentToDLQ

미사용 이벤트를 암호화하는 데 사용하는 경우 이벤트 버스에 대한 AWS KMS 고객 관리형 키 DLQ를 지정할 수도 있습니다. 자세한 정보는 데드레터 대기열을 사용하여 암호화된 이벤트 오류를 캡처합니다.을 참조하세요.

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 설정에 대해 설명합니다.

DLQ(Dead Letter Queue) 사용 시 고려할 사항

에 대한 DLQ를 구성할 때는 다음 사항을 고려하십시오. EventBridge

  • 표준 대기열만 지원됩니다. DLQ 입력에는 FIFO 대기열을 사용할 수 없습니다. EventBridge

  • EventBridge 오류 코드, 오류 메시지, 소진된 재시도 조건, 규칙 ARN, 재시도 시도, 대상 ARN 등 이벤트 메타데이터 및 메시지 속성을 메시지에 포함합니다. 이러한 값을 사용하여 이벤트와 실패 원인을 식별할 수 있습니다.

  • 동일한 계정의 DLQ에 대한 권한:

    • 콘솔을 사용하여 규칙에 대상을 추가하고 동일한 계정에서 Amazon SQS 대기열을 선택하면 대기열에 EventBridge 대한 액세스 권한을 부여하는 리소스 기반 정책이 대기열에 자동으로 연결됩니다.

    • EventBridge API PutTargets 작업을 사용하여 규칙의 대상을 추가하거나 업데이트하고 동일한 계정에서 Amazon SQS 대기열을 선택하는 경우 선택한 대기열에 권한을 수동으로 부여해야 합니다. 자세한 내용은 DLQ(Dead Letter Queue)에 권한 부여 섹션을 참조하세요.

  • 다른 계정에서 Amazon SQS 대기열을 사용할 수 있는 권한. AWS

    • 콘솔에서 규칙을 생성하는 경우 다른 계정의 대기열은 선택할 수 있도록 표시되지 않습니다. 다른 계정의 대기열에 대한 ARN을 제공한 다음, 수동으로 리소스 기반 정책을 연결하여 대기열에 권한을 부여해야 합니다. 자세한 내용은 DLQ(Dead Letter Queue)에 권한 부여 섹션을 참조하세요.

    • API를 사용하여 규칙을 생성하는 경우 DLQ(Dead Letter Queue)로 사용되는 다른 계정의 SQS 대기열에 리소스 기반 정책을 수동으로 연결해야 합니다. 자세한 내용은 DLQ(Dead Letter Queue)에 권한 부여 섹션을 참조하세요.

  • 사용하는 Amazon SQS 대기열은 규칙을 생성한 리전과 동일한 리전에 있어야 합니다.

DLQ(Dead Letter Queue)에 권한 부여

대기열에 이벤트를 성공적으로 전송하려면 이벤트를 전송할 수 있는 권한이 EventBridge 있어야 합니다. EventBridge 콘솔을 사용하여 DLQ를 지정하면 권한이 자동으로 추가됩니다. 여기에는 다음이 포함됩니다.

API를 사용하여 DLQ를 지정하거나 다른 AWS 계정의 대기열을 사용하는 경우 필요한 권한을 부여하는 리소스 기반 정책을 수동으로 만든 다음 대기열에 연결해야 합니다.

대상 데드레터 대기열 권한 예시

다음 리소스 기반 정책은 Amazon SQS 대기열로 이벤트 메시지를 보내는 EventBridge 데 필요한 권한을 부여하는 방법을 보여줍니다. 정책 예제는 SendMessage 작업을 사용하여 "DLQ"라는 대기열로 메시지를 전송할 수 있는 권한을 EventBridge 서비스에 부여합니다. MyEvent 대기열은 계정 123456789012의 us-west-2 지역에 있어야 합니다. AWS 이 Condition 명령문은 us-west-2 지역의 123456789012 계정에 생성된 MyTestRule "“라는 이름의 규칙에서 오는 요청만 허용합니다. AWS

{ "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 콘솔을 사용하여 대기열을 열고 액세스 정책을 선택하여 정책을 편집합니다. AWS CLI도 사용할 수 있습니다. 자세한 내용은 Amazon SQS 권한 섹션을 참조하세요.

DLQ(Dead Letter Queue)에서 이벤트를 재전송하는 방법

다음 두 가지 방법을 사용하여 메시지를 DLQ로부터 이동할 수 있습니다.

  • Amazon SQS 소비자 로직 작성 방지 – DLQ를 Lambda 함수에 대한 이벤트 소스로 설정하여 DLQ를 비웁니다.

  • Amazon SQS 소비자 로직 작성 — Amazon SQS API AWS , SDK를 사용하거나 DLQ에서 메시지를 폴링, AWS CLI 처리 및 삭제하기 위한 사용자 지정 소비자 로직을 작성할 수 있습니다.