模块 3:存储 Mysfit 信息
在本模块中,您将设置 Amazon DynamoDB,以便将 mysfit 信息存储在一个中心数据库表中。
概览
现在您已经部署了一项服务和有效的 CI/CD 管道,以便在更新代码存储库时自动将更改传输到该服务。您可以快速将新的应用程序功能从概念阶段推进到供 Mythical Mysfits 用户使用的阶段。随着敏捷性的提高,我们可以为 Mythical Mysfits 网站架构添加另一项基础功能,即数据层。
在本模块中,您将在 Amazon DynamoDB 中创建一个表。Amazon DynamoDB 是 AWS 上可扩展的托管 NoSQL 数据库服务,拥有超快的性能。我们不会将所有 Mysfit 数据都存储在一个静态 JSON 文件中,而是将此类数据存储在数据库中,使网站今后更具扩展性。
架构图

实施说明
-
步骤 1:将 NoSQL 数据库添加到 Mythical Mysfits
A:创建 DynamoDB 表
为了向架构中添加 DynamoDB 表,我们包含了另一个 JSON CLI 输入文件,该文件中定义了名为 MysfitsTable 的表。此表具有一个主索引(由名为 MysfitId 的哈希键属性定义)和两个二级索引。第一个二级索引将具有的 Species 的哈希键和 MysfitId 的范围键,第二个二级索引将具有 Alignment 的哈希键和 MysfitId 的范围键。
借助这两个二级索引,我们将能够对表执行查询,以检索与给定 Species 或 Alignment 匹配的 mysfit,从而启用筛选功能(您可能已经注意到该功能尚未在网站上启用)。您可以在 ~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json 中查看此文件。此文件可直接执行,无需做任何更改。要了解更多关于 DynamoDB 中的索引和其他核心概念的信息,请访问此页面。
要使用 AWS CLI 创建表,请在 Cloud9 终端中执行以下命令:
aws dynamodb create-table --cli-input-json file://~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json
运行此命令后,您可以在终端中执行以下 AWS CLI 命令,以查看新创建的表的详细信息:
aws dynamodb describe-table --table-name MysfitsTable
如果我们执行以下命令来检索表中存储的所有项目,会发现此表是空的:
aws dynamodb scan --table-name MysfitsTable
{ "Count": 0, "Items": [], "ScannedCount": 0, "ConsumedCapacity": null }
B:向 DynamoDB 表中添加项目
还提供了一个 JSON 文件,可用于向此表中批量插入大量 Mysfit 项目。这将通过 DynamoDB API BatchWriteItem 来实现。
要使用提供的 JSON 文件调用此 API,请在终端中执行以下命令(来自服务的响应应报告没有未处理的项目):
aws dynamodb batch-write-item --request-items file://~/environment/aws-modern-application-workshop/module-3/aws-cli/populate-dynamodb.json
现在,如果您运行相同的命令来扫描表中的所有内容,会发现这些项目已加载到表中:
aws dynamodb scan --table-name MysfitsTable
-
步骤 2:提交第一次的实际代码更改
A:复制更新后的 Flask 服务代码
现在我们的数据已经包含在此表中,我们来将应用程序代码修改为从表中读取数据,而不是返回模块 2 中使用的静态 JSON 文件。我们已经为 Flask 微服务提供了一组新的 Python 文件,但现在不再读取静态 JSON 文件,而是向 DynamoDB 发出请求。
该请求使用名为 boto3 的 AWS Python 开发工具包构建。该开发工具包是一种通过 Python 代码与 AWS 服务进行交互的简单且功能强大的方法。您可以通过它使用一些服务客户端定义和函数,这些定义和函数与您在本研讨会中已经执行的 AWS API 和 CLI 命令能够很好地对应。使用 boto3 可轻松将这些命令转换为有效的 Python 代码。
要将新文件复制到 CodeCommit 存储库目录中,请在终端中执行以下命令:
cp ~/environment/aws-modern-application-workshop/module-3/app/service/* ~/environment/MythicalMysfitsService-Repository/service/
B:复制更新后的 Flask 服务代码
现在,我们需要使用 git 命令行客户端将这些代码更改签入 CodeCommit。
运行以下命令以签入新的代码更改并启动 CI/CD 管道:
cd ~/environment/MythicalMysfitsService-Repository
git add .
git commit -m "Add new integration to DynamoDB."
git push
现在,只需 5 到 10 分钟,您就会看到代码更改通过 CodePipeline 中的完整 CI/CD 管道,到达您在 Amazon ECS 上的 AWS Fargate 部署的 Flask 服务。
您可以随时浏览 AWS CodePipeline 控制台,查看这些更改在管道中的进度。
-
步骤 3:在 S3 中更新网站内容
最后,我们需要将新的 index.html 页面发布到我们的 S3 存储桶中,以便使用通过查询字符串筛选响应的新 API 功能。新的 index.html 文件位于 ~/environment/aws-modern-application-workshop/module-3/web/index.html。
在 Cloud9 IDE 中打开此文件,使用相应的 NLB 终端节点替换显示“REPLACE_ME”的字符串,具体操作与模块 2 中的操作相同。注意不要包含 /mysfits 路径。
如果需要,您可以参考 /module-2/ 目录中已经编辑的文件。将终端节点替换为指向您的 NLB 后,通过运行以下命令上传新的 index.html 文件(替换为在模块 1 中创建的存储桶的名称):
aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-3/web/ s3://your_bucket_name_here/
重新访问 Mythical Mysfits 网站,查看从 DynamoDB 表加载的一群新 Mysfit 生物,以及如何使用筛选功能!
模块 3 到此结束。