本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 DynamoDB 與 Amazon 整合 EventBridge
Amazon DynamoDB 提供 DynamoDB Streams 進行變更資料擷取,可擷取 DynamoDB 資料表中的項目層級變更。DynamoDB Streams 可以叫用 Lambda 函數來處理這些變更,允許事件驅動與其他服務和應用程式整合。DynamoDB Streams 也支援篩選,可實現有效率且針對性的事件處理。
DynamoDB Streams 支援每個碎片最多兩個同時的取用者,並支援透過 Lambda 事件篩選進行篩選,因此只會處理符合特定條件的項目。有些客戶可能有支援兩個以上消費者的需求。其他人可能需要在處理變更事件之前加以豐富,或使用更進階的篩選和路由。
將 DynamoDB 與 整合 EventBridge 可以支援這些需求。
Amazon EventBridge 是一種無伺服器服務,使用事件將應用程式元件連接在一起,讓您更容易建置可擴展的事件驅動應用程式。 透過 EventBridge 管道與 Amazon DynamoDB EventBridge 進行原生整合,實現從 DynamoDB 到 EventBridge 匯流排的無縫資料流程。然後,該匯流排可以透過一組規則和目標散出到多個應用程式和服務。
運作方式
DynamoDB 與 EventBridge 管道之間的整合使用 DynamoDB Streams 擷取 DynamoDB 資料表中項目層級變更的時間順序順序。以這種方式擷取的每個記錄都包含表格中修改的資料。
EventBridge 管道會耗用來自 DynamoDB Streams 的事件,並將其路由至 EventBridge 匯流排等目標 (事件匯流排是接收事件並將其傳送至目的地的路由器,也稱為目標)。交付是以哪些規則符合事件的內容為基礎。或者,管道也包含篩選特定事件並在將事件資料傳送至目標之前對事件資料執行擴充的功能。
雖然 EventBridge 支援多種目標類型 ,但實作扇出設計時的常見選擇是使用 Lambda 函數作為目標。下列範例示範與 Lambda 函數目標的整合。
透過主控台建立整合
請依照下列步驟,透過 建立整合 AWS Management Console。
-
請依照 DynamoDB 開發人員指南 啟用串流中的步驟,在來源資料表上啟用 DynamoDB 串流。如果來源資料表上已啟用 DynamoDB Streams,請確認目前消費者少於兩個。取用者可以是 Lambda 函數、DynamoDB Global Tables、Amazon DynamoDB 與 Amazon OpenSearch Service 的零ETL整合,或是直接從 DynamoDB Streams Kinesis 轉接器等串流讀取的應用程式。
-
按照 EventBridge 使用者指南中建立 Amazon EventBridge 事件匯流排一節中的步驟建立事件匯流排。 EventBridge
-
建立事件匯流排時,請啟用結構描述探索 。
-
-
按照 EventBridge 使用者指南的建立 Amazon EventBridge 管道區段中的步驟建立管道。 EventBridge
-
設定來源時,在來源欄位中選取 DynamoDB,在 DynamoDB Streams 欄位中選取來源資料表串流的名稱。
-
設定目標時,請在目標服務欄位中選取EventBridge 事件匯流排,並在事件匯流排中選取步驟 2 中建立的事件匯流排。
-
-
將範例項目寫入來源 DynamoDB 資料表以觸發事件。這將允許從範例項目 EventBridge 推斷結構描述。此結構描述可用來建立路由事件的規則。例如,如果您實作的設計模式涉及屬性 超載,您可能想要觸發不同的規則,具體取決於排序索引鍵的值。有關如何將項目寫入 DynamoDB 的詳細資訊,請參閱 DynamoDB 開發人員指南中的使用項目和屬性一節。
-
依照 Lambda 開發人員指南中使用 Python 建置 Lambda 函數一節中的步驟,建立用作目標的範例 Python Lambda 函數。建立函數時,您可以使用下列範例程式碼來示範整合。調用時,它會列印
NewImage
和 ,並隨事件一起OldImage
接收,這些事件可以在 CloudWatch 日誌中檢視。import json def lambda_handler(event, context): dynamodb = event.get('detail', {}).get('dynamodb', {}) new_image = dynamodb.get('NewImage') old_image = dynamodb.get('OldImage') if new_image: print("NewImage:", json.dumps(new_image, indent=2)) if old_image: print("OldImage:", json.dumps(old_image, indent=2)) return {'statusCode': 200, 'body': json.dumps(event)}
-
按照建立 EventBridge 規則區段中的步驟,對事件 EventBridge 使用者指南做出回應,以建立將事件路由至新 Lambda 函數的規則。
-
定義規則詳細資訊時,請選取您在步驟 2 中建立的事件匯流排名稱,做為事件匯流排 。
-
建置事件模式時,請遵循現有結構描述 的指南。在這裡,您可以為事件選取探索的結構描述登錄檔和探索的結構描述。這可讓您設定特定於使用案例的事件模式,只路由符合特定屬性的訊息。例如,如果您只想要在 SK 開頭為 的 DynamoDB 項目上進行比對
“user#”
,則要使用像這樣的組態。 -
完成針對結構描述設計模式後,請按一下 中的產生事件JSON模式。如果您改為比對 DynamoDB Streams 上顯示的所有事件,請JSON針對事件模式使用下列 。
{ "source": ["aws.dynamodb"] }
-
選取目標時,請遵循 AWS 服務指南。在選取目標欄位中,選擇「Lambda 函數」。在函數欄位中,選取您在步驟 5 中建立的 Lambda 函數。
-
-
您現在可以依照 EventBridge 使用者指南中事件匯流排上的啟動或停止結構描述探索一節中的步驟,停止事件匯流排上的結構描述探索。
-
將第二個範例項目寫入來源 DynamoDB 資料表以觸發事件。驗證事件是否在每個步驟成功處理。
-
請遵循 EventBridge 使用者指南PutEventsApproximateSuccessCount中的監控 Amazon EventBridge 區段,檢視事件匯流排的 CloudWatch 指標。
-
請遵循 Lambda 開發人員指南中的 Lambda 函數監控和疑難排解一節,來檢視 Lambda 函數的函數日誌。如果您的 Lambda 函數使用提供的範例程式碼,您應該會看到
NewImage
OldImage
從 CloudWatch Logs 日誌群組中列印的 DynamoDB Streams 和 。 -
請遵循 Lambda 開發人員指南中的 Lambda 函數監控和疑難排解一節,檢視 Lambda 函數的錯誤計數和成功率 (%) 指標。
-
後續步驟
此範例提供與單一 Lambda 函數作為目標的基本整合。若要進一步了解更複雜的組態,例如建立多個規則、建立多個目標、與其他 服務整合,以及豐富事件,請參閱完整的 EventBridge 使用者指南:入門 EventBridge。
注意
請注意可能與應用程式相關的任何 EventBridge 配額。雖然 DynamoDB Streams 會隨資料表擴展容量,但 EventBridge 配額是分開的。在大型應用程式中要注意的常見配額為每秒交易的調用限流限制,以及PutEvents每秒交易的限流限制。這些配額會指定可傳送至目標的叫用次數,以及每秒可放入匯流排的事件次數。