

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Kinesis Data Streams 和 Firehose 搭配 將 DynamoDB 記錄交付至 Amazon S3 AWS CDK
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk"></a>

*Shashank Shrivastava 和 Daniel Matuki da Cunha，Amazon Web Services*

## 摘要
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-summary"></a>

此模式提供範例程式碼和應用程式，以使用 Amazon Kinesis Data Streams 和 Amazon Data Firehose，將記錄從 Amazon DynamoDB 交付至 Amazon Simple Storage Service (Amazon S3)。模式的方法使用 [AWS Cloud Development Kit (AWS CDK) L3 建構](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)，並包含如何在資料交付至 Amazon Web Services (AWS) 雲端上的目標 S3 儲存貯體 AWS Lambda 之前使用 執行資料轉換的範例。

Kinesis Data Streams 會在 DynamoDB 資料表中記錄項目層級修改，並將其複寫至所需的 Kinesis 資料串流。您的應用程式可以存取 Kinesis 資料串流，並以近乎即時的速度檢視項目層級的變更。Kinesis Data Streams 也提供其他 Amazon Kinesis 服務的存取權，例如 Firehose 和 Amazon Managed Service for Apache Flink。這表示您可以建置應用程式，以提供即時儀表板、產生提醒、實作動態定價和廣告，以及執行複雜的資料分析。

您可以將此模式用於資料整合使用案例。例如，運輸車輛或工業設備可以將大量資料傳送至 DynamoDB 資料表。然後，這些資料可以轉換並存放在 Amazon S3 中託管的資料湖中。然後，您可以使用 Amazon Athena、Amazon Redshift Spectrum、Amazon Rekognition 和 等無伺服器服務來查詢和處理資料，並預測任何潛在的瑕疵 AWS Glue。

## 先決條件和限制
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-prereqs"></a>

*先決條件*
+ 作用中 AWS 帳戶。
+ AWS Command Line Interface (AWS CLI)，已安裝並設定。如需詳細資訊，請參閱 AWS CLI 文件中的 [入門 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。
+ Node.js (18.x\$1) 和 npm，已安裝並設定。如需詳細資訊，請參閱 `npm` 文件中的[下載並安裝 Node.js 和 npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)。
+ aws-cdk (2.x\$1)，已安裝並設定。如需詳細資訊，請參閱 AWS CDK 文件中的 [入門 AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)。
+ GitHub [aws-dynamodb-kinesisfirehose-s3-ingestion](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/) 儲存庫，在您的本機電腦上複製和設定。
+ DynamoDB 資料表的現有範例資料。資料必須使用下列格式： `{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}`

## Architecture
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-architecture"></a>

下圖顯示使用 Kinesis Data Streams 和 Firehose 將記錄從 DynamoDB 交付至 Amazon S3 的範例工作流程。

![\[使用 Kinesis Data Streams 和 Firehose 將記錄從 DynamoDB 交付至 Amazon S3 的範例工作流程。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/e2a9c412-312e-4900-9774-19a281c578e4/images/6e6df998-e6c2-4eaf-b263-ace752194689.png)


該圖顯示以下工作流程：

1. 使用 Amazon API Gateway 做為 DynamoDB 的代理來擷取資料。您也可以使用任何其他來源將資料擷取至 DynamoDB。 

1. 項目層級變更會在 Kinesis Data Streams 中以近乎即時的方式產生，以交付至 Amazon S3。

1. Kinesis Data Streams 會將記錄傳送至 Firehose 以進行轉換和交付。 

1. Lambda 函數會將記錄從 DynamoDB 記錄格式轉換為 JSON 格式，其中僅包含記錄項目屬性名稱和值。

## 工具
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-tools"></a>

*AWS 服務*
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) 是一種軟體開發架構，可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。
+ [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) 是命令列雲端開發套件，可協助您與 AWS CDK 應用程式互動。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一種開放原始碼工具，可協助您 AWS 服務 透過命令列 shell 中的命令與 互動。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 可協助您設定 AWS 資源、快速且一致地佈建資源，以及在整個 AWS 帳戶 和 生命週期中管理資源 AWS 區域。

*程式碼儲存庫*

此模式的程式碼可在 GitHub [aws-dynamodb-kinesisfirehose-s3-ingestion](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/) 儲存庫中使用。

## 史詩
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-epics"></a>

### 設定範例程式碼
<a name="set-up-and-configure-the-sample-code"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 安裝相依性。 | 在本機電腦上，執行下列命令，從 `pattern/aws-dynamodb-kinesisstreams-s3`和 `sample-application` 目錄中`package.json`的檔案安裝相依性：<pre>cd <project_root>/pattern/aws-dynamodb-kinesisstreams-s3 </pre><pre>npm install && npm run build</pre><pre>cd <project_root>/sample-application/</pre><pre>npm install && npm run build</pre>  | 應用程式開發人員，一般 AWS | 
| 產生 CloudFormation 範本。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | 應用程式開發人員、一般 AWS、AWS DevOps | 

### 部署 資源
<a name="deploy-the-resources"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 檢查並部署 資源。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | 應用程式開發人員、一般 AWS、AWS DevOps | 

### 將資料擷取至 DynamoDB 資料表以測試解決方案
<a name="ingest-data-into-the-dynamodb-table-to-test-the-solution"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將範例資料擷取至 DynamoDB 資料表。 | 在 中執行下列命令，將請求傳送至 DynamoDB 資料表 AWS CLI：`aws dynamodb put-item --table-name <your_table_name> --item '{"<table_partition_key>": {"S": "<partition_key_ID>"},"MessageData":{"S": "<data>"}}'`範例：`aws dynamodb put-item --table-name SourceData_table --item '{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}'`根據預設，如果操作成功， `put-item`不會傳回任何值做為輸出。如果操作失敗，則會傳回錯誤。資料存放在 DynamoDB 中，然後傳送至 Kinesis Data Streams 和 Firehose。 您可以使用不同的方法來將資料新增至 DynamoDB 資料表。如需詳細資訊，請參閱 DynamoDB 文件中的將[資料載入資料表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.LoadData.html)。 | 應用程式開發人員 | 
| 確認已在 S3 儲存貯體中建立新的物件。 | 登入 AWS 管理主控台 並監控 S3 儲存貯體，以確認已使用您傳送的資料建立新物件。 如需詳細資訊，請參閱 Amazon S3 文件中的 [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)。 | 應用程式開發人員，一般 AWS | 

### 清除資源
<a name="clean-up-resources"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 清除資源。 | 執行 `cdk destroy`命令來刪除此模式使用的所有資源。 | 應用程式開發人員，一般 AWS | 

## 相關資源
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ [s3-static-site-stack.ts](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/use_cases/aws-s3-static-website/lib/s3-static-site-stack.ts#L25) (GitHub 儲存庫）
+ [aws-apigateway-dynamodb 模組](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb) (GitHub 儲存庫）
+ [aws-kinesisstreams-kinesisfirehose-s3 模組](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-kinesisstreams-kinesisfirehose-s3) (GitHub 儲存庫）
+ [變更 DynamoDB Streams 的資料擷取 ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)(DynamoDB 文件）
+ [使用 Kinesis Data Streams 擷取對 DynamoDB 的變更](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html) (DynamoDB 文件）