AWS 上的项目

构建现代 Web 应用程序

部署 Web 应用程序、连接到数据库和分析用户行为

模块 3:存储 Mysfit 信息

在本模块中,您将设置 Amazon DynamoDB,以便将 mysfit 信息存储在一个中心数据库表中。

概览

现在您已经部署了一项服务和有效的 CI/CD 管道,以便在更新代码存储库时自动将更改传输到该服务。您可以快速将新的应用程序功能从概念阶段推进到供 Mythical Mysfits 用户使用的阶段。随着敏捷性的提高,我们可以为 Mythical Mysfits 网站架构添加另一项基础功能,即数据层。

在本模块中,您将在 Amazon DynamoDB 中创建一个表。Amazon DynamoDB 是 AWS 上可扩展的托管 NoSQL 数据库服务,拥有超快的性能。我们不会将所有 Mysfit 数据都存储在一个静态 JSON 文件中,而是将此类数据存储在数据库中,使网站今后更具扩展性。

架构图

Fargate 和 DynamoDB 架构图

 完成时间

20 分钟

 使用的服务

实施说明

  • 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
  • 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 控制台,查看这些更改在管道中的进度。

  • 最后,我们需要将新的 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 到此结束。

下一模块:设置用户注册。