本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
與 Amazon 集成 EventBridge
Amazon DynamoDB 提供 DynamoDB Streams 來擷取變更資料,可讓您擷取 DynamoDB 表格中的項目層級變更。DynamoDB Streams 可叫用 Lambda 函數來處理這些變更,以便與其他服務和應用程式進行事件驅動的整合。DynamoDB Streams 也支援篩選,進而提供有效率且鎖定目標的事件處理。
DynamoDB Streams 每個碎片最多支援兩個同時取用者,並支援透過 Lambda 事件篩選進行篩選,以便僅處理符合特定條件的項目。某些客戶可能需要支持兩個以上的消費者。其他人可能需要在處理變更事件之前豐富變更事件,或者使用更進階的篩選和路由。
將 DynamoDB 與整合 EventBridge 可支援這些需求。
Amazon EventBridge 是一種無伺服器服務,使用事件將應用程式元件連接在一起,讓您更輕鬆地建置可擴展的事件驅動型應用程式。 EventBridge 透過 EventBridge 管道提供與 Amazon DynamoDB 的原生整合,讓資料能夠順暢地從 DynamoDB 流到匯流排。 EventBridge 然後,該匯流排可以透過一組規則和目標散發至多個應用程式和服務。
運作方式
DynamoDB 和 EventBridge 管道之間的整合使用 DynamoDB Streams 在 DynamoDB 資料表中擷取項目層級變更的時間順序序列。以這種方式擷取的每個記錄都包含表格中修改的資料。
EventBridge 管道會使用 DynamoDB Streams 中的事件,並將它們路由至匯流排等目標 (事件 EventBridge 匯流排是接收事件並將事件傳送至目標的路由器,也稱為目標)。傳送是根據符合事件內容的規則而定。或者,管道還包括篩選特定事件並在將事件資料傳送至目標之前對事件資料執行擴充的功能。
雖然 EventBridge 支援多種目標類型,但實作扇出設計時常見的選擇是使用 Lambda 函數做為目標。下列範例示範與 Lambda 函數目標的整合。
透過主控台建立整合
請依照下列步驟透過建立整合 AWS Management Console。
-
依照 DynamoDB 開發人員指南一啟用串流節中的步驟,在來源資料表上啟用 DynamoDB 串流。如果來源資料表上已啟用 DynamoDB Streams,請確認目前有少於兩個取用者。消費者可以是 Lambda 函數、DynamoDB 全域表、Amazon DynamoDB 零 ETL 與 Amazon OpenSearch 服務的整合,或是直接從串流讀取的應用程式,例如透過 DynamoDB Streams Kinesis 配器。
-
按照 EventBridge 使用 EventBridge 者指南中〈建立 Amazon EventBridge 事件匯流排〉一節中的步驟建立事件匯流排。
-
建立事件匯流排時,啟用結構描述探索。
-
-
按照 EventBridge 使用 EventBridge 者指南中〈建立 Amazon EventBridge 管道〉一節中的步驟建立管道。
-
設定來源時,請在「來源」欄位中選取 DynamoDB,然後在「DynamoDB Streams」欄位中選取來源表格串流的名稱。
-
設定目標時,在「目標服務」欄位中選取EventBridge 事件匯流排,然後在「事件匯流排作為目標」欄位中選取在步驟 2 中建立的事件匯流排。
-
-
將範例項目寫入來源 DynamoDB 資料表以觸發事件。這將允許 EventBridge 從示例項推斷結構描述。此結構描述可用來建立路由事件的規則。例如,如果您要實作涉及多載屬性的設計模式,您可能會想要根據排序索引鍵的值觸發不同的規則。您可以在 DynamoDB 開發人員指南的〈使用項目和屬性〉一節中找到有關如何將項目寫入 DynamoDB 的詳細資訊。
-
依照 Lambda 開發人員指南中〈使用 Python 建置 L ambda 函數〉一節中的步驟,建立用作目標的 Python Lambda 函數範例。創建函數時,您可以使用下面的示例代碼來演示集成。當調用時,它將打印
NewImage
並與可以在 CloudWatch 日誌中查看的事件一起OldImage
接收。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 資料表以觸發事件。驗證事件是否已在每個步驟中成功處理。
-
按照使用者指南的監控 Amazon EventBridge 章節,檢視事件匯流排的 EventBridge 指 CloudWatch 標PutEventsApproximateSuccess計數。
-
按照 Lambda 開發人員指南的監控和疑難排解 Lambda 函數一節,檢視 Lambda 函數的函數日誌。如果您的 Lambda 函數使用提供的範例程式碼,您應該會看到 CloudWatch 記錄日誌群組中列印的
NewImage
和OldImage
DynamoDB Streams。 -
請參閱 Lambda 開發人員指南的監控和疑難排解 Lambda 函數一節,檢視 Lambda 函數的錯誤計數和成功率 (%) 量度。
-
後續步驟
此範例提供以單一 Lambda 函數做為目標的基本整合。若要更好地瞭解更複雜的組態,例如建立多個規則、建立多個目標、與其他服務整合,以及豐富事件,請參閱完整的 EventBridge 使用者指南:入門。 EventBridge
注意
請注意可能與您的應用程式相關的任何 EventBridge 配額。雖然 DynamoDB Streams 容量會隨著您的表格進行擴展,但 EventBridge 配額是不同的。在大型應用程式中要注意的常見配額是每秒交易的呼叫節流限制,以及每秒交易的限PutEvents制。這些配額會指定可傳送至目標的呼叫數目,以及每秒可放入匯流排的事件數目。