本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:建立可篩選來源事件的 EventBridge 管道
在本教學中,您將建立一個管道,將 DynamoDB 串流來源連接到 Amazon SQS 佇列目標。這包括為管道指定事件模式,以便在篩選要傳遞至佇列的事件時使用。然後,您將測試管道,以確保只傳遞所需的事件。
先決條件:建立來源和目標
在建立管之前,您需要建立管要連接的來源和目標。在此情況下,Amazon DynamoDB 資料串流可做為管道來源,以及 Amazon SQS 佇列做為管道目標。
若要簡化此步驟,您可以使用 AWS CloudFormation 來部署來源和目標資源。若要這麼做,您將建立定義下列資源的 CloudFormation 範本:
-
管道源
名為
pipe-tutorial-source
的 Amazon DynamoDB 資料表使用啟用串流,以提供 DynamoDB 資料表中項目變更資訊的排序流程。 管道類型
一個名為
pipe-tutorial-target
的 Amazon SQS 佇列,用於從您的管道接收 DynamoDB 事件串流。
若要建立用於佈建管道資源的 CloudFormation 範本
複製下方 AWS CloudFormation 用於產生先決條件的 範本 區段中的 JSON 範本文字。
將範本儲存為 JSON 檔案 (例如
~/pipe-tutorial-resources.json
)。
接下來,使用您剛建立的範本檔案來佈建 CloudFormation 堆疊。
注意
建立 CloudFormation 堆疊後,您將需要支付其佈建 AWS 的資源費用。
使用 CLI AWS 佈建教學課程先決條件
執行下列 CLI 命令,其中
--template-body
指定範本檔案的位置:aws cloudformation create-stack --stack-name
pipe-tuturial-resources
--template-body file://~/pipe-tutorial-resources.json
使用 CloudFormation 主控台佈建教學先決條件
-
在 https://https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 選取堆疊,然後選取建立堆疊,再選擇使用新資源 (標準)。
CloudFormation 會顯示建立堆疊精靈。
針對先決條件:準備範本,保持選取範本已準備就緒。
針對指定範本,選取上傳範本檔案,然後選擇下一步。
-
設定堆疊及其將佈建的資源:
針對堆疊名稱 輸入
pipe-tuturial-resources
。針對參數,請保留 DynamoDB 資料表和 Amazon SQS 佇列的預設名稱。
選擇下一步。
選擇下一步,然後選擇提交。
CloudFormation 會建立堆疊,並佈建範本中定義的資源。
如需 CloudFormation 的詳細資訊,請參閱AWS CloudFormation 《 使用者指南》中的什麼是 AWS CloudFormation?。
步驟 1:建立管道
佈建管道來源和目標後,您現在可以建立管道以連接這兩個服務。
使用 EventBridge 控制台建立管道
前往 https://console.aws.amazon.com/events/
開啟 Amazon EventBridge 主控台。 在導覽窗格中,選擇管道。
選擇建立管道。
針對名稱,為您的管道
pipe-tutorial
命名。指定 DynamoDB 資料串流來源:
在詳細資料下,針對來源,選取 DynamoDB 資料串流。
EventBridge 接會顯示 DynamoDB 特定的來源組態設定。
針對 DynamoDB 資料串流,請選取
pipe-tutorial-source
。保持起始位置設定為預設值
Latest
。選擇下一步。
指定並測試事件模式以篩選事件:
篩選可讓您控制管道傳送至擴充或目標的事件。管道只會將符合事件模式的事件傳送至擴充或目標。
如需詳細資訊,請參閱Amazon EventBridge 管道中的事件篩選。
注意
您只需為傳送至擴充功能或目標的事件付費。
在範例事件 - 選用下,保持選取AWS 事件,並確定已選取 DynamoDB 串流範例事件 1。
這是您將用來測試我們的事件模式的示例事件。
在事件模式下,輸入下列事件模式:
{ "eventName": ["INSERT", "MODIFY"] }
選擇測試模式。
EventBridge 會顯示一個訊息方塊,說明範例事件符合事件模式。這是因為範例事件的
eventName
值為INSERT
。選擇下一步。
選擇下一步以略過指定擴充項目。
在此範例中,您不會選取擴充。擴充可讓您在將來源資料傳送至目標之前,選取服務以增強來源的資料。如需詳細資訊,請參閱Amazon EventBridge 管道中的事件擴充。
將您的 Amazon SQS 佇列指定為管道目標:
在詳細資料下,針對目標服務,選取 Amazon SQS 佇列。
針對佇列,選取
pipe-tutorial-target
。將目標輸入轉換器區段保留空白。
如需詳細資訊,請參閱Amazon EventBridge 管道輸入轉換。
選擇建立管道。
EventBridge 會建立管道並顯示管路詳細資訊頁面。管的狀態更新為
Running
後,即可準備就緒。
步驟 2:確認管道篩選器事件
管道已設置,但尚未從表接收事件。
若要測試管道,您將更新 DynamoDB 表格中的項目。每次更新都會產生 DynamoDB 串流傳送到我們管道的事件。有些會匹配您指定的事件模式,有些則不會。然後,您可以檢查 Amazon SQS 佇列,以確保管道僅交付符合我們事件模式的事件。
更新表格項目以產生事件
請在 https://console.aws.amazon.com/dynamodb/
開啟 DynamoDB 主控台。 從左側導覽列中,選取資料表。選取
pipe-tutorial-source
資料表。DynamoDB 會顯示
pipe-tutorial-source
的表格詳細資料頁面。選取瀏覽表格項目,然後選擇建立項目。
DynamoDB 顯示建立項目頁面。
在屬性之下,建立新的表格項目:
針對相簿輸入
Album A
。針對藝人,輸入
Artist A
。選擇建立項目。
更新表格項目:
在退回的項目下,選擇相簿 A。
選取新增屬性,然後選取字串。
輸入一個新值
Song
,其值為Song A
。選擇儲存變更。
刪除表格項目:
在退回的項目下,檢查相簿 A
在動作選單中,選取刪除項目。
您已對表格項目進行了三次更新;這會為 DynamoDB 資料串流產生三個事件:
建立項目時的
INSERT
事件。當您將屬性新增至項目時的
MODIFY
事件。刪除項目時的
REMOVE
事件。
但是,您為管道指定的事件模式應該過濾掉任何不是 INSERT
或 MODIFY
事件的事件。接下來,確認管道是否將預期的事件傳送到佇列。
確認管道是否將預期的事件傳送到佇列。
在 https://console.aws.amazon.com/sqs/
開啟 Amazon SQS 主控台。 選擇
pipe-tutorial-target
佇列。Amazon SQS 會顯示佇列詳細資訊頁面。
選取傳送和接收訊息,然後在接收訊息下選擇郵件輪詢。
佇列會輪詢管道,然後列出其接收的事件。
選擇事件名稱以查看已傳遞的事件 JSON。
隊列中應該有兩個事件:一個事件帶有 INSERT
的 eventName
,一個事件帶有 MODIFY
的 eventName
。但是,管道並未傳遞刪除表格項目的事件,因為該事件有一個 REMOVE
的 eventName
,它與您在管道中指定的事件模式不相符。
步驟 3:清除您的資源
首先,刪除管道本身。
使用 EventBridge 控制台建立管道
前往 https://console.aws.amazon.com/events/
開啟 Amazon EventBridge 主控台。 在導覽窗格中,選擇管道。
選取
pipe-tutorial
管道,然後選擇刪除。
然後,刪除 CloudFormation 堆疊,以避免因其中佈建的資源持續使用量而計費。
使用 CLI AWS 刪除教學課程先決條件
執行下列 CLI 命令,其中
--stack-name
指定堆疊的位置:aws cloudformation delete-stack --stack-name
pipe-tuturial-resources
使用 AWS CloudFormation 主控台刪除教學課程先決條件
-
在 https://https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 在堆疊頁面上,選取堆疊,然後選取刪除。
選取刪除以確認您的動作。
AWS CloudFormation 用於產生先決條件的 範本
使用下面的 JSON 建立 CloudFormation 範本,以佈建本教學課程所需的來源和目標資源。
{ "AWSTemplateFormatVersion": "2010-09-09", "Description" : "Provisions resources to use with the EventBridge Pipes tutorial. You will be billed for the AWS resources used if you create a stack from this template.", "Parameters" : { "SourceTableName" : { "Type" : "String", "Default" : "pipe-tutorial-source", "Description" : "Specify the name of the table to provision as the pipe source, or accept the default." }, "TargetQueueName" : { "Type" : "String", "Default" : "pipe-tutorial-target", "Description" : "Specify the name of the queue to provision as the pipe target, or accept the default." } }, "Resources": { "PipeTutorialSourceDynamoDBTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "AttributeDefinitions": [{ "AttributeName": "Album", "AttributeType": "S" }, { "AttributeName": "Artist", "AttributeType": "S" } ], "KeySchema": [{ "AttributeName": "Album", "KeyType": "HASH" }, { "AttributeName": "Artist", "KeyType": "RANGE" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 10, "WriteCapacityUnits": 10 }, "StreamSpecification": { "StreamViewType": "NEW_AND_OLD_IMAGES" }, "TableName": { "Ref" : "SourceTableName" } } }, "PipeTutorialTargetQueue": { "Type": "AWS::SQS::Queue", "Properties": { "QueueName": { "Ref" : "TargetQueueName" } } } } }