기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
지원되는 콘텐츠 유형: JSON, Avro, Protobuf 및 원시 바이트
PutRawEvents는 모든 바이트를 허용합니다. 각 항목의는 EventBridge에 바이트가 무엇인지 SystemMetadata.ContentType 알려주고, 해당 값은 EventBridge가 이벤트를 필터링하고 전송하기 전에 페이로드를 역직렬화할지 여부를 결정합니다. Avro 및 Protobuf의 경우 EventBridge는 요청에서 지정한 스키마 레지스트리에 대해 페이로드를 역직렬화하므로 구독자는 이벤트를 JSON으로 필터링, 변환 및 수신합니다. 불투명 바이트의 경우 EventBridge는 페이로드를 그대로 전달합니다.
ContentType |
EventBridge가 페이로드로 수행하는 작업 | Schema Registry |
|---|---|---|
application/json |
JSON 콘텐츠를 필터링하고 변환합니다. | 사용되지 않습니다 |
application/avro |
Avro 바이너리를 JSON으로 역직렬화한 다음 해당 JSON을 기준으로 필터링하고 변환합니다. | 필수 |
application/protobuf |
Protobuf 바이너리를 JSON으로 역직렬화한 다음 해당 JSON에서 필터링하고 변환합니다. | 필수 |
application/octet-stream |
페이로드를 역직렬화하거나 검사하지 않습니다. 전송된 바이트를 전달합니다. | 사용되지 않습니다 |
EventBridge가 페이로드를 역직렬화하는 방법
항목의이 application/avro 또는 인 경우 application/protobuf EventBridgeContentType는 해당 항목에 대해 다음 단계를 수행합니다.
-
EventBridge는 레지스트리의 직렬 변환기가 페이로드 바이트에 쓴 스키마 식별자를 읽습니다.
-
EventBridge는에서 지정한 레지스트리에서 일치하는 스키마를 가져오
SchemaRegistryConfiguration.RegistryUri고 페이로드를 JSON으로 역직렬화합니다. 스키마를 찾거나 읽을 수 없거나 페이로드를 역직렬화할 수 없는 경우 항목은 항목당 오류와 함께 실패하고 요청의 다른 항목은 영향을 받지 않습니다. -
구독자가 필터를 정의하면 EventBridge는 역직렬화된 JSON을 기준으로 필터를 평가합니다.
-
EventBridge는 구독자의 변환을 역직렬화된 JSON에 적용하고 대상에 JSON을 전달합니다.
에서 각 PutRawEvents 요청의 레지스트리 이름을 지정합니다SchemaRegistryConfiguration.RegistryUri. 설정은 버스가 아닌 요청에 속하며 EventBridge는 동일한 요청의 JSON 항목에 대해 요청을 무시합니다. EventBridge는 호출자의 자격 증명으로 레지스트리를 읽으므로 게시하는 자격 증명은 레지스트리에 대한 읽기 액세스 권한이 필요합니다.
역직렬화 후 이벤트는에 게시된 모든 JSON 이벤트처럼 동작합니다PutRawEvents. 범위가 인 필터는 역직렬화된 레코드의 필드를 스키마 이름으로 DATA 일치시키고, JSONata 변환기는에서 이를 처리하며$events.Data, 대상은 JSON을 수신합니다. 또한 EventBridge는 전달된에 세 개의 키를 설정합니다SystemMetadata.
-
aws:SchemaId: 로 역직렬화된 스키마 EventBridge의 식별자, Glue용 AWS UUID, Confluent용 정수. -
aws:RegistryType: 이벤트를 디코딩한 레지스트리Glue또는Confluent. 에 게시된 이벤트는 이를 전달PutEvents하지 않습니다. -
ContentType:와 같이 게시된 항목의 콘텐츠 유형입니다application/avro.
EventBridge가 페이로드를 제공하는 방법 선택
ContentType는 두 개의 전송 경로 중 하나를 선택합니다.
-
JSON으로 역직렬화합니다.
ContentType을application/avro또는application/protobuf로 설정합니다. EventBridge는 스키마 레지스트리에 대해 페이로드를 역직렬화하고 구독자는에서 필터링하고DATA, JSONata로 변환하고, JSON을 수신합니다. 스키마 인코딩 이벤트의 콘텐츠 기반 라우팅 및 재구성을 원하는 경우이 경로를 사용합니다. -
바이트를 그대로 전달합니다.
ContentType를application/octet-stream으로 설정합니다. EventBridge는 페이로드를 역직렬화하거나 검사하지 않으며, 스키마 레지스트리가 관여하지 않으며, 구독자는 전송한 정확한 바이트를 수신합니다. 대상에서 페이로드를 직접 역직렬화하거나 콘텐츠가 EventBridge가 역직렬화하지 않는 형식인 경우이 경로를 사용합니다.
AWS Glue 스키마 레지스트리를 사용한 역직렬화
형식RegistryUri의 레지스트리 ARN으로 설정합니다arn:aws:glue:. 게시하기 전에 해당 언어의 AWS Glue Schema Registry 직렬 변환기로 페이로드를 인코딩합니다. 직렬 변환기는 EventBridge가 이벤트를 해결하고 역직렬화하는 데 사용하는 스키마 참조를 포함합니다.region:account-id:registry/name
EventBridge는 스키마를 게시 호출자로 읽으므로 게시 ID에 레지스트리 및 해당 스키마에 대한 읽기 액세스 권한을 부여합니다. 다음 정책은 하나의 레지스트리로 범위가 지정된 최소 권한을 부여합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:GetSchemaVersion", "Resource": [ "arn:aws:glue:us-east-1:111122223333:registry/orders", "arn:aws:glue:us-east-1:111122223333:schema/orders/*" ] } ] }
에서 Glue 레지스트리 ARN을 사용하여 스키마로 인코딩된 바이트를 게시합니다RegistryUri.
aws eventsv2 put-raw-events \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --schema-registry-configuration RegistryUri=arn:aws:glue:us-east-1:111122223333:registry/orders \ --entries '[ { "Data": "base64-encoded-avro-bytes", "SystemMetadata": { "ContentType": "application/avro", "EventGroupId": "order-1001" } } ]'
그런 다음 구독자는 역직렬화된 레코드를 필터링합니다. Avro 스키마에 라는 필드가 있는 경우 다음 필터orderId는 한 순서와 일치합니다.
{ "Scope": "DATA", "Pattern": "{\"orderId\":[\"1001\"]}" }
Confluent 스키마 레지스트리를 사용한 역직렬화
RegistryUri를 레지스트리의 HTTPS URL로 설정합니다. HTTPS 레지스트리에는 레지스트리의 API 키 또는 OAuth 자격 증명을 보유한 EventBridge 연결의 SchemaRegistryConfiguration.ConfluentPublicRegistryConfiguration.ConnectionArnARN인 도 필요합니다. 연결은 호출 계정에 속해야 합니다. 교차 계정 연결은 거부됩니다. 첫 번째 게시 전에 연결을 생성합니다. 게시하기 전에 해당 언어의 Confluent 직렬 변환기로 페이로드를 인코딩합니다. 직렬 변환기는 EventBridge가 이벤트를 해결하고 역직렬화하는 데 사용하는 스키마 참조를 포함합니다.
EventBridge는 사용자가 지정한 연결을 통해 레지스트리 자격 증명을 읽습니다. 게시 자격 증명에 해당 연결의 자격 증명을 읽을 수 있는 권한을 부여합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "events:RetrieveConnectionCredentials", "Resource": "arn:aws:events:us-east-1:111122223333:connection/confluent-registry/*" }, { "Effect": "Allow", "Action": ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"], "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:events!connection/confluent-registry/*", "Condition": { "Bool": { "aws:ViaAWSService": "true" } } } ] }
연결 보안 암호가 고객 관리형 AWS KMS 키로 암호화된 경우 해당 키kms:Decrypt에 도 부여합니다.
Confluent URL 및 연결 ARN을 사용하여 스키마로 인코딩된 바이트를 게시합니다.
aws eventsv2 put-raw-events \ --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --schema-registry-configuration '{ "RegistryUri": "https://psrc-example.us-east-1.aws.confluent.cloud", "ConfluentPublicRegistryConfiguration": { "ConnectionArn": "arn:aws:events:us-east-1:111122223333:connection/confluent-registry/EXAMPLE-1234-5678-abcd" } }' \ --entries '[ { "Data": "base64-encoded-protobuf-bytes", "SystemMetadata": { "ContentType": "application/protobuf" } } ]'
연결 인증 옵션
Confluent 레지스트리에 필요한 인증 유형으로 연결을 구성합니다. EventBridge는 연결이 생성하는 인증 헤더만 읽습니다. 원시 보안 암호를 볼 수 없으며 OAuth 토큰을 자동으로 새로 고칩니다.
API 키. Confluent Schema Registry는 일반적으로 스키마 레지스트리 API 키를 사용자 이름으로 사용하고 API 암호를 암호로 사용하여 HTTP Basic 인증을 사용합니다.
aws events create-connection \ --name confluent-registry \ --authorization-type API_KEY \ --auth-parameters '{ "ApiKeyAuthParameters": { "ApiKeyName": "Authorization", "ApiKeyValue": "Basicbase64(srApiKey:srApiSecret)" } }'
OAuth 클라이언트 자격 증명. EventBridge는 토큰을 가져오고 새로 고칩니다. 를 본문 파라미터grant_type=client_credentials로 포함해야 합니다. EventBridge는 이를 추가하지 않습니다.
aws events create-connection \ --name confluent-registry-oauth \ --authorization-type OAUTH_CLIENT_CREDENTIALS \ --auth-parameters '{ "OAuthParameters": { "AuthorizationEndpoint": "https://idp-domain/oauth/token", "HttpMethod": "POST", "ClientParameters": { "ClientID": "oauth-client-id", "ClientSecret": "oauth-client-secret" }, "OAuthHttpParameters": { "BodyParameters": [ { "Key": "grant_type", "Value": "client_credentials", "IsValueSecret": false } ] } } }'
EventBridge는 연결이 사용자를 대신하여 읽는 관리형 Secrets Manager 보안 암호(events!connection/...)에 자격 증명을 저장합니다.
역직렬화 없이 바이트 전송
EventBridge가 전송된 그대로 페이로드를 전송하도록 하려면 항목의를 SystemMetadata.ContentType로 설정합니다application/octet-stream. HTTP 헤더가 아닌 각 항목의 필드입니다. EventBridge는 바이트를 역직렬화하거나 검사하지 않으며 스키마 레지스트리가 관여하지 않으므로 대상에서 직접 역직렬화하는 Avro 또는 Protobuf를 포함한 모든 형식이 작동합니다. 콘텐츠가 불투명하기 때문에 DATA 필터는 일치시킬 수 없습니다. 항목의 Metadata 맵 또는에서 설정한 키를 METADATA사용하여에 필터를 사용하여 이러한 이벤트를 라우팅합니다SYSTEM_METADATA. 콘텐츠 기반 중복 제거는 여전히 작동하며 전송한 대로 바이트를 해시합니다. 변환기에서 페이로드는 Base64 문자열로 표시됩니다. 섹션을 참조하세요JSONata로 이벤트 변환.
역직렬화된 이벤트 필터링 및 변환
EventBridge가 이벤트를 JSON으로 역직렬화하면 페이로드가 일반 파이프라인을 통해 흐릅니다. 범위가 인 필터는 역직렬화된 필드와 스키마 이름을 DATA 일치시키고 JSONata 변환기는 해당 필드를에서 처리합니다$events.Data. Avro 또는 Protobuf로 게시된 이벤트는 일반 JSON으로 게시된 이벤트와 동일한 콘텐츠 기반 라우팅 및 구독자별 재구성을 가져옵니다. 두 가지 변환 규칙을 염두에 두고 역직렬화된 JSON에 대해 필터 패턴을 작성합니다.
-
Avro는 표준 JSON으로 역직렬화합니다. 변환은 단방향입니다. JSON은 Avro 객체로 다시 변환할 수 없습니다.
-
Protobuf는 스키마에 정의된 필드 이름을 사용하여 JSON으로 역직렬화하며, Protobuf 도구에서 일반적으로 하는 것처럼 카멜 대소문자로 변환하지 않습니다. 스키마 필드 이름과 일치합니다.
형식 간 이벤트 복제
EventBridge는 항목에 DeduplicationId를 제공하는 ID 기반과 EventBridge가 이벤트 콘텐츠의 SHA-256 해시를 계산하는 콘텐츠 기반이라는 두 가지 중복 제거 모드를 지원합니다. 역직렬화된 이벤트의 경우 콘텐츠 기반 중복 제거는 역직렬화된 JSON이 아닌 원래 Avro 또는 Protobuf 와이어 바이트를 해시합니다. 원래 페이로드가 바이트와 동일한 경우에만 두 이벤트가 중복됩니다. 따라서 다른 형식으로 게시된 동일한 논리적 이벤트는 중복 제거되지 않습니다. Avro 바이트, Protobuf 바이트 및 원시 JSON은 동일한 데이터로 역직렬화되더라도 유선에서 다릅니다. 사용자 지정 이벤트 버스에서 이벤트 주문 및 중복 제거 섹션을 참조하세요.
오류
-
없이 게시된 Avro 또는 Protobuf 항목은
ErrorCode가 이고VALIDATION_ERROR메시지가 인 항목별 오류로SchemaRegistryConfiguration실패합니다SchemaRegistryConfiguration is required. 요청의 다른 항목은 영향을 받지 않습니다. -
사용 가능한 연결의 이름을 지정하지
ConnectionArn않거나 다른 계정에 속하는는VALIDATION_ERROR및 레지스트리의 이름을 지정하는 메시지와 함께 항목에 실패합니다. -
찾거나 읽을 수 없는 스키마 또는 역직렬화할 수 없는 페이로드는 로 해당 항목에 실패합니다
VALIDATION_ERROR. 이 오류는 재시도할 수 없습니다. 다시 게시하기 전에 요청 또는 호출자의 레지스트리 액세스를 수정합니다. -
연결할 수 없는 레지스트리는에 대한 요청에 실패합니다
SchemaRegistryUnavailableException. Confluent OAuth 경로에서 레지스트리 액세스 토큰을 새로 고치는 동안이 문제가 발생할 수 있습니다. 이 오류는 일시적입니다. 백오프를 사용하여 요청을 다시 시도하세요.
일반적으로 항목별 결과 및 재시도 지침은 섹션을 참조하세요사용자 지정 이벤트 버스에 이벤트 게시.