View a markdown version of this page

사용자 지정 이벤트 버스의 범용 대상 - Amazon EventBridge

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

사용자 지정 이벤트 버스의 범용 대상

범용 대상은 구독자로부터 직접 AWS API 작업을 호출하며 그 사이에는 함수가 없습니다. 대기열, 주제 또는 함수를 대상으로 명명하는 대신 서비스 및 API 작업의 이름을 지정하고 EventBridge가 보내는 API 요청을 고정 JSON 또는 이벤트의 요청을 빌드하는 JSONata 표현식으로 작성합니다. 구독자는 DynamoDB 테이블에 항목을 쓰거나, Amazon S3 버킷에 객체를 넣거나, Amazon SNS 주제에 게시하거나, 경로에 Lambda 함수 없이 Step Functions 실행을 시작할 수 있습니다.

대상 ARN

범용 대상의 TargetArn에는 리전과 계정이 없는 고정 형식이 있습니다.

arn:aws:events:::aws-sdk:service:apiAction
  • service는 AWS SDK 서비스 식별자이며, 항상 서비스의 친숙한 이름이 아닙니다. 예를 들어 Step Functions는이 sfn아니라 입니다states. 작동하는 예: sqs, sns, s3, dynamodb, bedrockagentcore.

  • apiAction은 소문자 첫 문자가 이고가 putItem아닌 인 camelCase의 API 작업 이름입니다PutItem. EventBridge는 camelCase에 있는 작업 인덱스에 기록한 대로 정확하게 이름을 조회하므로 PutItem는 서비스 dynamodb에 대해 api PutItem이 유효하지 않습니다라는 메시지CreateSubscriber와 함께에 의해 거부됩니다. PutItem 동일한 메시지는 해당 서비스에 대한 작업이 존재하지 않음을 의미합니다.

예를 들어는 DynamoDB를 arn:aws:events:::aws-sdk:dynamodb:putItem 호출PutItem하고는 Amazon SNS를 arn:aws:events:::aws-sdk:sns:publish 호출합니다Publish.

지원되지 않는 작업

두 가지 종류의 작업은 구독자의 대상이 될 수 없으며 API 또는 전체 서비스가 지원되지 않는다는 메시지와 함께 CreateSubscriber 거부됩니다.

  • 이름이 , get list또는 로 시작하는 작업과 같이 상태가 변경되지 않고 읽는 작업입니다describe. 이벤트는 발생한 일을 수반하므로 대상 작업은 상태를 변경해야 합니다. EventBridge는 차단된 작업 이름 및 서비스 목록을 유지하며, 예를 들어 작업이 대상처럼 작동하지 않는 경우를 추가할 수 있습니다. 따라서 한 번 수락된 작업은 영구적으로 보장되지 않습니다. 생성 시간 메시지를 권한으로 취급합니다.

  • EventBridge 게시 작업, eventbridge:putEvents 및 eventbridge:putPartnerEvents. 이벤트를 다른 이벤트 버스로 전송하려면 버스 ARN을 로 설정합니다. 사용자 TargetArn지정 이벤트 버스와 사용자 지정 이벤트 버스 - Classic은 모두 자체적으로 대상으로 지원됩니다. 이벤트 버스 대상: 버스에서 버스로 섹션을 참조하세요.

파라미터

범용 대상에는가 필요합니다InvokeConfiguration.UniversalTargetParameters.는 이를 생략하거나와 같은 다른 파라미터 블록을 제공하는 구독자를 CreateSubscriber 거부합니다SqsParameters. 메시지에 UniversalTargetParameters가 예상된다고 표시됩니다. 를 통해 요청을 구체화합니다Input. 범용 대상 구독자는 구독자의를 사용하지 Transformer않으므로에 JSONata 변환을 넣습니다Input.

Input (필수)

API 요청, JSON 문자열 또는 요청을 {% %} 생성하는에 래핑된 JSONata 표현식. 대상 API 자체 참조의 멤버 이름을 사용합니다. Amazon SQS의 경우 QueueUrl 및 SendMessage입니다MessageBody. 최대 262,144자.

API에 필요한 필드에 대해 구독자를 생성하면 고정 JSONInput이 확인되고 누락된 필드는 이름으로 거부됩니다. JSONataInput의 결과는 이벤트에 따라 달라지므로 JSONata는 구문에 대해서만 확인되므로 대상 API가 대신 전송 시 표면을 거부하라는 요청이 있습니다.

InvocationTimeoutSeconds

EventBridge가 1초에서 30초 사이의 API 호출 1회를 대기하는 시간입니다. 기본값은 30입니다. 리터럴 정수여야 합니다. JSONata 표현식은 여기서 허용되지 않습니다.

의 전송 역할에는 dynamodb:PutItem, 배달 못한 편지 대기열 등 호출하는 APIsqs:SendMessage에 대한 IAM 작업이 RoleArn 필요합니다. 역할의 신뢰 정책 및 나머지 권한은 섹션을 참조하세요사용자 지정 이벤트 버스에 대한 액세스 제어.

배치 및 $events 배열

EventBridge는 이벤트당 API 호출이 아니라 배치당 하나의 API 호출을 수행합니다.는 배치를 1MaxBatchSize~500, 0MaxBatchWindowInSeconds~300으로 BatchConfiguration 설정합니다. 배치는 크기에 도달하거나 기간이 경과할 때 중 먼저 도래하는 시점에 닫힙니다.

JSONata에서 Input$events는 배치: 여기에 있는 이벤트의 배열입니다. 배치 크기가 1인 경우는 하나의 이벤트 값을 $events.Data.orderId 산출합니다. 배치가 클수록 $map 및와 같이 배열을 명시적으로 처리$join하거나 표현식이 API가 문자열을 예상하고 전송이 실패하는 배열을 생성합니다.

각 이벤트에 MaxBatchSize 대해 하나의 API 호출MaxBatchWindowInSeconds을 수행하려면 1로 설정하고 0으로 설정합니다. Input 고정 요청은 배치의 모든 이벤트에 대해 동일하고 배치는 단일 호출을 생성하기 때문에가 고정 JSON일 때마다이 작업을 수행합니다.

예: 이벤트당 DynamoDB 항목 1개

다음 구독자는 이벤트 orderId 필드에서 파티션 키를 가져PutRawEvents와에 게시된 각 이벤트에 대해 DynamoDB 테이블에 항목 하나를 씁니다. 테이블에 전송 역할dynamodb:PutItem이 필요합니다.

aws eventsv2 create-subscriber \ --name orders-to-dynamodb \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --invoke-configuration '{ "TargetArn": "arn:aws:events:::aws-sdk:dynamodb:putItem", "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole", "UniversalTargetParameters": { "Input": "{% { \"TableName\": \"orders\", \"Item\": { \"pk\": { \"S\": $events.Data.orderId }, \"total\": { \"N\": $string($events.Data.total) } } } %}" } }' \ --batch-configuration MaxBatchSize=1,MaxBatchWindowInSeconds=0 \ --on-failure-configuration '{ "Arn": "arn:aws:sqs:us-east-1:111122223333:orders-to-dynamodb-dlq" }'

로 게시된 이벤트PutEvents의 경우 detail동일한 필드가 아래에 있습니다$events.Data.detail.orderId. 이벤트 구조: 데이터, 메타데이터 및 시스템 메타데이터 섹션을 참조하세요.

API 호출이 실패하는 경우

구독자를 생성할 때 EventBridge는 ARN의 셰이프, 작업이 존재하고 차단되지 않았는지, 고정에 작업의 필수 필드가 Input 포함되어 있는지, JSONata의 경우 표현식이 구문 분석Input하는지 확인합니다. 요청에 이름이 지정된 리소스가 있는지 또는 전송 역할이 작업을 호출할 수 있는지는 확인하지 않습니다. 이러한 실패는 전송 시 발생하며, 모든 전송 실패는 구독자의에 따라 RetryPolicy기본적으로 300초 이내에 최대 5회까지 재시도됩니다. 한도에 도달하면 EventBridge는 errorCode 이름이 마지막 실패인 배달 못한 편지 대기열에 레코드를 씁니다. 범용 대상이 가장 자주 생성하는 코드는 다음과 같습니다.

  • CUSTOMER_VALIDATION: 대상 API가 요청을 거부했습니다. 예를 들어 필수 필드가 누락되었거나 값이 범위를 벗어났습니다. 레코드에는 대상 API의 자체 오류 메시지가 포함됩니다.

  • ACCESS_DENIED: EventBridge가 전송 역할을 수임할 수 없거나 역할이 리소스에 대한 작업을 호출할 수 없습니다. 레코드는 EventBridge 메시지에서 역할 또는 리소스의 이름을 지정하는를 나타냅니다.

  • RESOURCE_NOT_FOUND: 요청에 이름이 지정된 테이블, 주제 또는 기타 리소스가 존재하지 않습니다.

  • INPUT_TRANSFORMATION_FAILURE: Input의 JSONata 표현식에서 오류가 발생하거나 값이 생성되지 않았습니다.

  • THROTTLING: 대상 API가 호출을 제한했습니다. REQUEST_TOO_LARGE: 요청이 작업의 크기 제한을 초과했습니다. 더 낮았습니다MaxBatchSize. EXECUTION_TIMEOUT: 호출이 제한 시간 내에 반환되지 않았습니다.

오류 코드의 전체 목록, 각 메시지 및 리드라이브 방법은 섹션을 참조하세요재시도 정책 및 배달 못한 편지 대기열. 구독자 로그를 켜면 각 시도와 전송된 정확한 요청을 볼 수 있습니다. 단원을 참조하십시오사용자 지정 이벤트 버스에 대한 관찰성: 지표, 로그 및 CloudTrail.