本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
整合 DynamoDB 與 Amazon EventBridge
Amazon DynamoDB 提供 DynamoDB Streams 用於擷取變更資料,可擷取 DynamoDB 資料表中的項目層級變更。DynamoDB Streams 可以調用 Lambda 函式來處理這些變更,能夠與其他服務和應用程式以事件驅動的方式進行整合。DynamoDB Streams 也支援篩選,實現高效及鎖定目標的事件處理。
DynamoDB Streams 支援每碎片最多兩個同時取用者,並支援透過 Lambda 事件篩選進行篩選,因此只會處理符合特定條件的項目。有些客戶可能需要支援兩個以上取用者。其他客戶則可能需要先擴充變更事件再加以處理,或使用更進階的篩選和路由。
整合 DynamoDB 與 EventBridge 可支援前述需求。
Amazon EventBridge 是一種無伺服器服務,該服務使用事件將應用程式元件連接在一起,讓您更輕鬆地建置可擴展的事件驅動型應用程式。EventBridge 透過 EventBridge Pipes 與 Amazon DynamoDB 進行原生整合,實現從 DynamoDB 到 EventBridge 匯流排的無縫資料流程。然後該匯流排可以透過一組規則和目標展開傳送到多個應用程式和服務。
運作方式
DynamoDB 與 EventBridge 管道之間的整合,會使用 DynamoDB Streams 擷取 DynamoDB 資料表中項目層級變更的時間順序序列。以這種方式擷取的每個記錄都包含資料表中修改的資料。
EventBridge 管道會使用來自 DynamoDB Streams 的事件,並將其路由至 EventBridge 匯流排等目標 (事件匯流排是接收事件並將其交付至目的地的路由器,也稱為目標)。交付是以符合事件內容的規則為依據。管道還可選用篩選特定事件的功能,並可先擴充事件資料然後再將其傳送至目標。
雖然 EventBridge 支援多種目標類型,但實作展開傳送設計的常見選擇是使用 Lambda 函式作為目標。下列範例會示範與 Lambda 函式的整合。
透過主控台建立整合
請依照下列步驟透過 AWS 管理主控台 建立整合。
-
遵循《DynamoDB 開發人員指南》啟用串流 章節中的步驟,在來源資料表上啟用 DynamoDB Streams。如果來源資料表已啟用 DynamoDB Streams,請確認目前取用者少於兩個。取用者可以是 Lambda 函式、DynamoDB 全域資料表、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 Logs 中檢視。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 開頭為
“user#”的 DynamoDB 項目,就會使用這樣的設定。
-
依據您的結構描述完成設計模式後,請按一下以 JSON 格式產生事件模式。如果您想要比對 DynamoDB Streams 上顯示的所有事件,請針對事件模式使用下列 JSON。
{ "source": ["aws.dynamodb"] } -
選取目標時,請遵循 AWS 服務指南。在選取目標欄位選擇 Lambda 函式。在函式欄位選取您在步驟 5 建立的 Lambda 函式。
-
-
您現在可以依照《EventBridge 使用者指南》中在事件匯流排啟動或停止結構描述探索一節中的步驟,停止事件匯流排上的結構描述探索。
-
將第二個範例項目寫入來源 DynamoDB 資料表以觸發事件。驗證事件是否在每個步驟成功處理。
-
遵循《EventBridge 使用者指南》中監控 Amazon EventBridge 一節所述內容,檢視事件匯流排的 CloudWatch 指標 PutEventsApproximateSuccessCount。
-
遵循《Lambda 開發人員指南》中監控和疑難排解 Lambda 函式一節所述內容,檢視 Lambda 函式的函式日誌。如果您的 Lambda 函式使用提供的範例程式碼,您應該會在 CloudWatch Logs 日誌群組中看到列印的 DynamoDB Streams
NewImage和OldImage。 -
遵循《Lambda 開發人員指南》中監控和疑難排解 Lambda 函式一節所述內容,檢視 Lambda 函式的錯誤計數和成功率 (%) 指標。
-
後續步驟
此範例提供與單一 Lambda 函式作為目標的基本整合。如需進一步了解更複雜的設定,例如建立多項規則、建立多個目標、與其他服務整合,以及擴充事件,請參閱完整的 EventBridge 使用者指南:EventBridge 入門。
注意
請注意任何可能與應用程式相關的 EventBridge 配額。雖然 DynamoDB Streams 容量會隨資料表擴展,但 EventBridge 配額是另外計算的。在大型應用程式中要注意的常見配額為每秒交易的調用限流限制,以及每秒交易的 PutEvents 限流限制。這些配額會指定可傳送至目標的調用數量,以及每秒可放入匯流排的事件數量。