本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在本教學中,您將建立將 DynamoDB 串流來源連接到 Amazon SQS 佇列目標的管道。這包括為管道指定事件模式,以便在篩選要傳遞至佇列的事件時使用。然後,您將測試管道,以確保只傳遞所需的事件。
先決條件:建立來源和目標
在建立管之前,您需要建立管要連接的來源和目標。在此情況下,Amazon DynamoDB 資料串流可做為管道來源,以及 Amazon SQS 佇列做為管道目標。
若要簡化此步驟,您可以使 AWS CloudFormation 用佈建來源和目標資源。為此,您將創建一個定義以下資源的 CloudFormation 模板:
-
管道源
名為
pipe-tutorial-source
的 Amazon DynamoDB 資料表使用啟用串流,以提供 DynamoDB 資料表中項目變更資訊的排序流程。 管道類型
一個名為的 Amazon SQS 佇列
pipe-tutorial-target
,用於從您的管道接收 DynamoDB 事件串流。
建立用於佈建管資源的 CloudFormation 樣板的步驟
複製下方AWS CloudFormation 模板生成先決條件 區段中的JSON範本文字。
將範本儲存為JSON檔案 (例如,
~/pipe-tutorial-resources.json
)。
接下來,使用您剛建立的範本檔案來佈建 CloudFormation 堆疊。
注意
一旦您建立您的 CloudFormation 堆疊,您將需要支付其佈建的 AWS 資源費用。
使用佈建教學課程的必要條件 AWS CLI
執行下列CLI命令,其中
--template-body
指定範本檔案的位置:aws cloudformation create-stack --stack-name
pipe-tuturial-resources
--template-body file://~/pipe-tutorial-resources.json
使用 CloudFormation 主控台佈建教學課程必要
-
請在以下位置開啟 AWS CloudFormation 主控台。
https://console.aws.amazon.com/cloudformation 選取堆疊,然後選取建立堆疊,再選擇使用新資源 (標準)。
CloudFormation 顯示「建立堆疊」精靈。
針對先決條件:準備範本,保持選取範本已準備就緒。
針對指定範本,選取上傳範本檔案,然後選擇下一步。
-
設定堆疊及其將佈建的資源:
針對堆疊名稱 輸入
pipe-tuturial-resources
。對於「參數」,請保留 DynamoDB 表格和 Amazon SQS 佇列的預設名稱。
選擇下一步。
選擇下一步,然後選擇提交。
CloudFormation 創建堆棧並佈建模板中定義的資源。
如需有關的詳細資訊 CloudFormation,請參閱什麼是 AWS CloudFormation? 在《AWS CloudFormation 使用者指南》中。
步驟 1:建立管道
佈建管道來源和目標後,您現在可以建立管道以連接這兩個服務。
使用 EventBridge 控制台創建管道
在打開 Amazon EventBridge 控制台https://console.aws.amazon.com/events/
。 在導覽窗格中,選擇管道。
選擇建立管道。
針對名稱,為您的管道
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 Pipes 輸入轉換。
選擇建立管道。
EventBridge 建立管並顯示管詳細資料頁面。管的狀態更新為
Running
後,即可準備就緒。
步驟 2:確認管道篩選器事件
管道已設置,但尚未從表接收事件。
若要測試管道,您將更新 DynamoDB 表格中的項目。每次更新都會產生 DynamoDB 串流傳送到我們管道的事件。有些會匹配您指定的事件模式,有些則不會。然後,您可以檢查 Amazon SQS 佇列,以確保管道僅交付符合我們事件模式的事件。
更新表格項目以產生事件
在開啟 DynamoDB 控制台。https://console.aws.amazon.com/dynamodb/
從左側導覽列中,選取資料表。選取
pipe-tutorial-source
資料表。DynamoDB 會顯示
pipe-tutorial-source
的表格詳細資料頁面。選取瀏覽表格項目,然後選擇建立項目。
DynamoDB 顯示建立項目頁面。
在屬性之下,建立新的表格項目:
針對相簿輸入
Album A
。針對藝人,輸入
Artist A
。選擇建立項目。
更新表格項目:
在退回的項目下,選擇相簿 A。
選取新增屬性,然後選取字串。
輸入一個新值
Song
,其值為Song A
。選擇儲存變更。
刪除表格項目:
在退回的項目下,檢查相簿 A
在動作選單中,選取刪除項目。
您已對表格項目進行了三次更新;這會為 DynamoDB 資料串流產生三個事件:
建立項目時的
INSERT
事件。當您將屬性新增至項目時的
MODIFY
事件。刪除項目時的
REMOVE
事件。
但是,您為管道指定的事件模式應該過濾掉任何不是 INSERT
或 MODIFY
事件的事件。接下來,確認管道是否將預期的事件傳送到佇列。
確認管道是否將預期的事件傳送到佇列。
在打開 Amazon SQS 控制台https://console.aws.amazon.com/sqs/
。 選擇
pipe-tutorial-target
佇列。Amazon SQS 顯示隊列詳細信息頁面。
選取傳送和接收訊息,然後在接收訊息下選擇郵件輪詢。
佇列會輪詢管道,然後列出其接收的事件。
選擇事件名稱以查看已傳送JSON的事件。
隊列中應該有兩個事件:一個事件帶有 INSERT
的 eventName
,一個事件帶有 MODIFY
的 eventName
。但是,管道並未傳遞刪除表格項目的事件,因為該事件有一個 REMOVE
的 eventName
,它與您在管道中指定的事件模式不相符。
步驟 3:清除您的資源
首先,刪除管道本身。
使用 EventBridge 控制台刪除管道
在打開 Amazon EventBridge 控制台https://console.aws.amazon.com/events/
。 在導覽窗格中,選擇管道。
選取
pipe-tutorial
管道,然後選擇刪除。
然後,刪除 CloudFormation 堆疊,以避免因其中佈建的資源持續使用量而計費。
使用刪除教學課程必要條件 AWS CLI
運行以下CLI命令,其中
--stack-name
指定堆棧的名稱:aws cloudformation delete-stack --stack-name
pipe-tuturial-resources
使用 AWS CloudFormation 主控台刪除教學課程必要條件
-
請在以下位置開啟 AWS CloudFormation 主控台。
https://console.aws.amazon.com/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" }
}
}
}
}