

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Kinesis Data Streams 和 Firehose 将 DynamoDB 记录传送到亚马逊 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*

## Summary
<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 Data Stream。您的应用程序可以访问 Kinesis 数据流，近实时查看项目级别的更改。Kinesis Data Streams 还提供了对其他 Amazon Kinesis 服务的访问权限，例如 Firehose 和适用于 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-s计算机上克隆和配置的 3 次摄取](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/)存储库。
+ DynamoDB 表现有示例数据。数据必须采用以下格式：`{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}`

## 架构
<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_cn/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 服务 通过命令行外壳中的命令进行交互。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。

*代码存储库*

此模式的代码可在 GitHub [aws-dynamodb-kinesisfirehose-s3 摄取](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>

### 设置和配置 Sample 代码
<a name="set-up-and-configure-the-sample-code"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装依赖项。 | 在本地计算机上，通过运行以下命令，为 `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_cn/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>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 检查和部署资源。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将您的示例数据摄取至 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 存储桶，以验证是否使用您发送的数据创建了新对象。 有关更多信息，请参阅 [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)Amazon S3 文档中的。 | 应用程序开发人员，常规 AWS | 

### 清理 资源
<a name="clean-up-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 清理资源。 | 运行 `cdk destroy` 命令以删除此模式使用的所有资源。 | 应用程序开发人员，常规 AWS | 

## 相关资源
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ s@@ [3-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 文档）