기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
사용자 지정 이벤트 버스에서 이벤트 구독
구독자는 원하는 이벤트와 전송할 위치를 알려주는 하나의 리소스입니다. 버스CreateSubscriber, 필터 및 하나의 대상의 이름을 지정하여 로 생성합니다. 버스를 감시하고 필터와 일치하는 이벤트를 유지하며 선택적으로 각 이벤트를 변환하고 정확히 하나의 대상으로 전달합니다. 이벤트를 여러 대상으로 팬아웃하려면 동일한 버스에서 각 대상에 대해 하나의 구독자를 생성합니다.
EventBridge는 지정된 버스에서 한 번에 하나의 구독자 생성 또는 삭제를 적용합니다. 진행 중인 동안 동일한 버스DeleteSubscriber의 두 번째 CreateSubscriber 또는는에서 실패합니다. ConcurrentModificationException다시 시도하세요. 사용자 지정 이벤트 버스 할당량 따라서의 생성 및 삭제 요금이 버스당 적용됩니다.
대상에 도달하는 이벤트 필터링
FilterConfiguration 에는 목록이 있습니다Filters. 각 필터에는 EventBridge 이벤트 패턴 구문Pattern의 , 및 하나의가 있습니다Scope. 범위당 최대 하나의 필터를 가질 수 있으며, EventBridge는 목록의 모든 필터와 일치하는 경우에만 이벤트를 제공합니다. 가 없는 구독자는 버스에서 모든 이벤트를 FilterConfiguration 수신합니다.
-
DATA: 페이로드와 일치합니다. 에 설명된 셰이프에 대해 패턴을 작성합니다이벤트 구조: 데이터, 메타데이터 및 시스템 메타데이터. -
METADATA:는 생산자가 설정한 키-값 페어와 일치PutRawEvents하며, 정확히 일치합니다. -
SYSTEM_METADATA:aws:Source또는와 같이 EventBridge가 설정하는 필드와 일치합니다EventGroupId.
패턴 구문, 범위 규칙 및 예제는 섹션을 참조하세요구독자에 대한 이벤트 필터링.
페이로드 변환
Transformer.Type는 대상이 수신하는 항목을 선택합니다. 범용 대상은 이를 사용하지 않습니다. 섹션을 참조하세요사용자 지정 이벤트 버스의 범용 대상.
-
RAW, 기본값입니다. 페이로드만. -
WITH_METADATA. 전체 이벤트:Data,Metadata및SystemMetadata. -
JSONATA. 에서{% %}구분 기호로JsonataConfiguration.Expression래핑된 JSONata 표현식의 결과로, 이벤트를 로 사용할 수 있습니다$events.
EventBridge는 구독자를 생성할 때 표현식의 구문을 확인하고 전송 시 평가합니다. 를 발생시키거나 값을 생성하지 않는 표현식은 해당 이벤트의 전송에 실패합니다. 실제 이벤트에 의존하기 전에 실제 이벤트에 대해 표현식을 테스트합니다. $events의 내용, 추가 함수 및 제한은 섹션을 참조하세요JSONata로 이벤트 변환.
하나의 대상으로 전송
InvokeConfiguration 에는 TargetArn, EventBridge가 대상을 호출하기 위해 수임RoleArn하는 , 대상 유형과 일치하는 최대 하나의 파라미터 블록이 포함됩니다. 대부분의 파라미터 값은 JSONata 표현식을 수락하므로 값은 이벤트에서 가져올 수 있습니다. 다음 표에는 사용자 지정 대상 유형과 해당 파라미터 블록이 나열되어 있습니다. 각 에는 아래에 자체 페이지가 있습니다사용자 지정 이벤트 버스 구독자의 대상.
| 대상 | 파라미터 블록 |
|---|---|
| Amazon SQS 대기열 | SqsParameters |
| Lambda 함수 | LambdaParameters |
| Kinesis 스트림 | KinesisParameters |
| Step Functions 상태 머신 | StepFunctionsParameters |
| Amazon SNS 주제 | SnsParameters |
| HTTP 엔드포인트 또는 API 대상 | HttpParameters |
| Firehose 스트림 | FirehoseParameters |
사용자 지정 이벤트 버스 또는 사용자 지정 이벤트 버스 - Classic도 대상이 될 수 있습니다. 버스 ARN을 로 설정합니다TargetArn. Amazon SQS FIFO 대기열과 같은 FIFO 대상의 경우 파라미터 블록에서 대상의 자체 중복 제거 식별자를 JSONata 표현식을 사용하여 이벤트에서 파생된 메시지SqsParameters.MessageDeduplicationId당 값으로 설정합니다. 상수는 대상이 첫 번째 메시지 이후 모든 메시지를 무시하도록 합니다.
범용 대상은 그 사이에 함수 없이 AWS API 작업을 직접 호출합니다. ARN의 형식은 arn:aws:events:::aws-sdk:입니다. 예를 들어, service:apiActionarn:aws:events:::aws-sdk:dynamodb:putItem는 JSON 또는 JSONata 표현식으로 요청을 UniversalTargetParameters.Input 보관합니다. 이름 지정 규칙, 일괄 처리 및 실패 동작은 섹션을 참조하세요사용자 지정 이벤트 버스의 범용 대상.
구독자를 생성할 때 EventBridge는 ARN에서 대상 유형을 확인하고 파라미터 블록이 대상 유형과 일치하는지, ARN이 계정에 속하는지, 모든 표현식이 구문 분석되는지 세 가지 사항을 확인합니다. 대상이 존재하는지, 역할에 도달할 수 있는지, 대상의 API가 값을 수락하는지는 전송 시 확인되므로 대상에서 첫 번째 전송을 확인합니다.
재시도 및 배달 못한 편지 대기열
RetryPolicy는 EventBridge가 기본적으로 300초 이내에 실패한 전송을 재시도하는 시간을 설정하고 재시도를 소진한 각 이벤트에 대한 레코드를 수신하는 Amazon SQS 대기열의 OnFailureConfiguration.Arn 이름을 지정합니다. 구독자를 생성할 때 둘 다 설정합니다. 제한, 레코드 형식 및 리드라이브 방법은 섹션을 참조하세요재시도 정책 및 배달 못한 편지 대기열.
전송 역할
의 역할은 계정에 속하고 events.amazonaws.com 서비스 보안 주체를 신뢰해야 RoleArn 합니다. 호출자가 iam:PassRole 역할을 통해 구독자를 생성해야 하거나 EventBridge가 대상 ARN을 확인하기 전에 요청을 거부합니다. 역할의 권한 정책에는 두 가지 권한이 필요합니다.
-
예를 들어
sqs:SendMessage대기열, 함수, 주제 또는 스트림lambda:InvokeFunction에서 대상sns:Publish에 필요한 작업kinesis:PutRecords입니다. -
sqs:SendMessage의 배달 못한 편지 대기열.OnFailureConfiguration.Arn전송이 실패하면 전송 실패 시 아무 곳도 자체적으로 기록할 수 없으며 이러한 이벤트는 신호 없이 손실됩니다.
다음 신뢰 정책은 EventBridge가 역할을 수임하도록 허용합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
다음 권한 정책은 Amazon SQS 대기열로 전송하고 배달 못한 편지를 두 번째 대기열로 전송합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "InvokeTheTarget", "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders" }, { "Sid": "WriteToTheDeadLetterQueue", "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq" } ] }
예: 대기열에 대량 주문 전달
다음 명령은에 게시된 이벤트에 대해 Amazon SQS 대기열에 500개 이상의 주문을 전달하는 구독자를 생성하고 배달 못한 편지 대기열에 실패를 PutEvents보냅니다.
aws eventsv2 create-subscriber \ --name large-orders \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --filter-configuration '{ "Filters": [ { "Scope": "DATA", "Pattern": "{\"detail\":{\"total\":[{\"numeric\":[\">\",500]}]}}" } ] }' \ --invoke-configuration '{ "TargetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders", "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole" }' \ --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:large-orders-dlq" }'
문제 해결: 게시했지만 대상에 아무것도 도착하지 않음
게시 응답에는 버스가 이벤트를 수락하고 저장했다고만 표시되며 전송을 확인하지 않습니다. 다음 검사를 순서대로 수행합니다.
- 증상
게시 호출은 실패한 항목 없이 HTTP 200을 반환했으며 몇 분 후에 대상이 아무것도 수신하지 않았습니다.
- 원인
전송이 여전히 재시도 중이고, 구독자가
STOPPED이거나 취소되었으며, 구독자의 이고 구독자가 존재하기 전에StartingPositionLATEST이벤트가 게시되었거나, 필터가 다른 게시 API에 대해 작성되고 아무것도 일치하지 않거나, 전송 역할이 대상 또는 배달 못한 편지 대기열에 도달할 수 없는 다섯 가지 항목 중 하나입니다.는 문제의 절반을TargetInvocations알려줍니다. 가TargetInvocations없는의 데이터 포인트는 전송이 시도되고 실패함을EventsDelivered의미합니다.FilterEvaluated에 데이터 포인트가 있는TargetInvocations동안에는에 데이터 포인트가 없으므로 전송을 시도하지 않습니다. 구독자가 인지 확인하고를RUNNING확인합니다EventTransformationFailures.- Solution
-
구독자를 읽습니다.
State는RUNNING이고는 없어야Revoked하며, true인 경우에만 나타납니다.StartingPosition및 필터를 기록해 둡니다.aws eventsv2 describe-subscriber \ --subscriber-arn arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLE1234567890abcdef에서 구독자의 지표를 읽습니다
AWS/EventsV2. 0FilterEvaluated은이 구독자에게 도달한 이벤트가 없음을 의미합니다. 즉, 생산자가 다른 버스에 게시했거나 구독자가와 함께 존재하기 전입니다LATEST. 0FilterEvaluated을 초과하고 0FilterMatched을 초과하면 필터가 일치하지 않음을 의미합니다. 섹션을 참조하세요이벤트 구조: 데이터, 메타데이터 및 시스템 메타데이터.FilterMatched에 데이터 포인트가 있고 그렇지EventsDelivered않은 경우 전송이 실패하고 결과를 기록하는 지표는 구독자에 따라 달라집니다. 즉, 배달 못한 편지 대기열이 구성되지 않은EventsDropped경우, 이벤트가 대기열에 도달한OnFailureDestinationDelivered경우 및 그렇지 않은OnFailureDestinationFailed경우입니다.로그를 켜고 재현합니다.
LogConfiguration.Level를INFOIncludePayload로 설정하고FULL, 로그 전송을 연결하고, 다시 게시하고,EVENT_DELIVERY_ATTEMPT레코드를 읽습니다. 각 에는 대상의 자체 오류 코드와 메시지가 포함되어 있으며,details.target_input는 전송하려는 것이 아니라 EventBridge가 전송한 것입니다. 사용자 지정 이벤트 버스에 대한 관찰성: 지표, 로그 및 CloudTrail 섹션을 참조하세요.필터가 의심되는 경우 필터,
Transformer.TypeWITH_METADATA및 대상으로 소유한 대기열 없이 동일한 버스에 진단 구독자를 추가합니다. 각 이벤트는 EventBridge가 보는 대로 ,Metadata및Data로 정확하게 전달됩니다SystemMetadata. 그런 다음 한 번에 한 조건씩 필터를 단순화합니다. 제거한 마지막 조건이 원인입니다.
- Verification(확인)
일치하는 이벤트 하나와 그렇지 않은 이벤트를 게시합니다. 첫 번째는 대상에 도착하고 1씩
EventsDelivered증가하며, 두 번째는 도착하지 않고FilterEvaluated증가하지만FilterMatched는 그렇지 않습니다.
참고
구독자의 지표는 버스 소유자와 구독자의 소유자가 사용할 수 있으며, 해당 로그는 구독자의 소유자에게만 전달됩니다.