本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
支援的內容類型:JSON、Avro、Protobuf 和原始位元組
PutRawEvents 接受任何位元組。每個項目的 都會SystemMetadata.ContentType告知 EventBridge 位元組是什麼,該值會決定 EventBridge 在篩選和交付事件之前是否還原序列化承載。對於 Avro 和 Protobuf,EventBridge 會根據您在請求上命名的結構描述登錄檔還原序列化承載,因此訂閱者會以 JSON 的形式篩選、轉換和接收事件。對於不透明位元組,EventBridge 會交付未處理的承載。
ContentType |
EventBridge 如何處理承載 | 結構描述登錄檔 |
|---|---|---|
application/json |
篩選和轉換 JSON 內容 | 未使用 |
application/avro |
將 Avro 二進位檔還原序列化為 JSON,然後在該 JSON 上篩選和轉換 | 必要 |
application/protobuf |
將 Protobuf 二進位檔還原序列化為 JSON,然後在該 JSON 上篩選和轉換 | 必要 |
application/octet-stream |
不會還原序列化或檢查承載。傳送傳送的位元組 | 未使用 |
EventBridge 如何還原序列化承載
當項目的 ContentType是 application/avro或 時application/protobuf,EventBridge 會針對該項目執行下列步驟。
-
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 不會還原序列化的格式時,請使用此路徑。
使用 Glue AWS 結構描述登錄檔還原序列化
RegistryUri 設定為 形式的登錄檔 ARNarn:aws:glue:。在發佈之前,使用您語言的 AWS Glue 結構描述登錄檔序列化程式來編碼承載;序列化程式會內嵌 EventBridge 用來解析和還原序列化事件的結構描述參考。region:account-id:registry/name
EventBridge 會將結構描述讀取為發佈發起人,因此請將發佈身分讀取存取權授予登錄檔及其結構描述。下列政策會授予範圍限定為一個登錄檔的最低許可。
{ "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 登錄檔也需要 SchemaRegistryConfiguration.ConfluentPublicRegistryConfiguration.ConnectionArn,即保留登錄檔 API 金鑰或 OAuth 登入資料的 EventBridge 連線 ARN。連線必須屬於呼叫帳戶;跨帳戶連線會遭到拒絕。在第一次發佈之前建立連線。在發佈之前,使用 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 結構描述登錄檔通常會使用 HTTP 基本身分驗證搭配結構描述登錄檔 API 金鑰做為使用者名稱,並使用 API 秘密做為密碼。
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 支援兩種重複資料刪除模式:以 ID 為基礎,您可以在項目DeduplicationId上提供 ,以內容為基礎,EventBridge 會計算事件內容的 SHA-256 雜湊。對於還原序列化事件,內容型重複資料刪除會雜湊原始 Avro 或 Protobuf 線路位元組,而不是還原序列化 JSON。只有當兩個事件的原始承載是位元組相同時,才會重複。因此,不會刪除以不同格式發佈的相同邏輯事件:Avro 位元組、Protobuf 位元組和原始 JSON 在線路上不同,即使它們還原序列化為相同的資料。請參閱 在自訂事件匯流排上排序和刪除重複事件。
錯誤
-
發佈的 Avro 或 Protobuf 項目沒有
SchemaRegistryConfiguration失敗,因為每個項目錯誤具有ErrorCode的VALIDATION_ERROR和陳述 的訊息SchemaRegistryConfiguration is required。請求中的其他項目不受影響。 -
ConnectionArn不命名為可用連線或屬於另一個帳戶的 會失敗項目,VALIDATION_ERROR並顯示名稱為登錄的訊息。 -
找不到或無法讀取的結構描述,或無法對其還原序列化的承載,會使用 使該項目失敗
VALIDATION_ERROR。此錯誤無法重試;請在重新發佈之前修正請求或發起人的登錄檔存取。 -
無法到達的登錄檔會失敗 的請求
SchemaRegistryUnavailableException。在 Confluent OAuth 路徑上,這可能會在重新整理登錄檔存取字符時發生。此錯誤是暫時性的;使用退避重試請求。
如需每個項目的結果和一般重試指引,請參閱 將事件發佈至自訂事件匯流排。