Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

步骤 3:在生产环境中使用 DynamoDB 服务进行部署

在前面的部分中,您在使用 DynamoDB Local 的计算机上本地部署并测试了井字游戏应用程序。现在,您可以按如下所示在生产环境中部署应用程序:

  • 使用 Elastic Beanstalk 部署应用程序,这是一种易用的服务,用于部署可扩展 Web 应用程序及服务。有关更多信息,请转到将 Flask 应用程序部署到 AWS Elastic Beanstalk

    Elastic Beanstalk 将启动一个或多个您通过 Elastic Beanstalk 配置的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,您的井字游戏应用程序会在其上运行。

  • 使用 Amazon DynamoDB 服务,创建位于 AWS 而不是计算机本地上的 Games 表。

此外,您还必须配置权限。您创建的任何 AWS 资源 (例如 DynamoDB 中的 Games 表) 在默认情况下都是专用的。只有资源所有者 (也就是创建 Games 表的 AWS 账户) 可以访问此表。因此,默认情况下您的井字游戏应用程序无法更新 Games 表。

要授予必需的权限,您需要创建 AWS Identity and Access Management (IAM) 角色,并向此角色授予访问 Games 表的权限。您的 Amazon EC2 实例首先使用此角色。作为响应,AWS 返回临时安全证书,Amazon EC2 实例可以用它来代表井字游戏应用程序来更新 Games 表。在您配置 Elastic Beanstalk 应用程序时,需要指定单个或多个 Amazon EC2 实例可以使用的 IAM 角色。有关 IAM 角色的更多信息,请转到 Amazon EC2 用户指南(适用于 Linux 实例) 中的 Amazon EC2 的 IAM 角色

注意

在您为井字游戏应用程序创建 Amazon EC2 实例之前,您必须先确定希望 Elastic Beanstalk 在其中创建实例的 AWS 区域。创建 Elastic Beanstalk 应用程序后,您需要在配置文件中提供相同的区域名称和终端节点。井字游戏应用程序使用此文件中的信息来创建 Games 表,并发送特定 AWS 区域中的后续请求。DynamoDB Games 表和 Elastic Beanstalk 启动的 Amazon EC2 实例均必须位于同一 AWS 区域中。有关可用区域的列表,请转至 Amazon Web Services 一般参考 中的 Amazon DynamoDB

总之,您可在生产环境中执行以下操作来部署井字游戏应用程序:

  1. 使用 AWS IAM 服务创建 IAM 角色。您将策略链接到此角色,授予 DynamoDB 操作的权限,用于访问 Games 表。

  2. 打包井字游戏应用程序的代码和配置文件,创建一个 .zip 文件。使用此 .zip 文件将井字游戏应用程序代码提供给 Elastic Beanstalk 以放置在您的服务器上。有关创建数据包的更多信息,请转至 AWS Elastic Beanstalk 开发人员指南 中的创建应用程序源数据包

    在配置文件 (beanstalk.config) 中,您需要提供 AWS 区域和终端节点的信息。井字游戏应用程序使用此信息来确定要与哪个 DynamoDB 区域通信。

  3. 设置 Elastic Beanstalk 环境。Elastic Beanstalk 将启动一个或多个 Amazon EC2 实例,并在其上部署您的井字游戏应用程序数据包。在 Elastic Beanstalk 环境准备就绪后,您通过添加 CONFIG_FILE 环境变量来提供配置文件名称。

  4. 创建 DynamoDB 表。使用 Amazon DynamoDB 服务,您将在 AWS 而非本地计算机上创建 Games 表。请记住,此表具有简单主键,由字符串类型的 GameId 分区键组成。

  5. 在生产环境中测试游戏。

3.1:为 Amazon EC2 创建 IAM 角色

创建 Amazon EC2 类型的 IAM 角色将允许运行您的井字游戏应用程序的 Amazon EC2 实例使用正确的 IAM 角色,并发出应用程序请求以访问 Games 表。创建角色时,请选择 Custom Policy (自定义策略) 选项,然后复制和粘贴以下策略。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Action":[ "dynamodb:ListTables" ], "Effect":"Allow", "Resource":"*" }, { "Action":[ "dynamodb:*" ], "Effect":"Allow", "Resource":[ "arn:aws:dynamodb:us-west-2:922852403271:table/Games", "arn:aws:dynamodb:us-west-2:922852403271:table/Games/index/*" ] } ] }

如需更多说明,请转到 IAM 用户指南中的创建用于 AWS 服务的角色 (AWS 管理控制台)

3.2:在 Amazon DynamoDB 中创建 Games 表

DynamoDB 中的 Games 表存储游戏数据。如果该表不存在,则应用程序将为您创建该表。在这种情况下,我们将允许应用程序创建 Games 表。

3.3:打包和部署井字游戏应用程序代码

如果您按照了此示例中的步骤操作,则您已下载井字游戏应用程序。否则,请下载应用程序并将所有文件提取到本地计算机上的文件夹。有关说明,请参阅步骤 1:在本地进行部署和测试

提取所有文件之后,请注意您会有一个 code 文件夹。要将此文件夹切换到 Electric Beanstalk 上,您需要将此文件夹的内容打包为 .zip 文件。首先,您需要添加配置文件到该文件夹。您的应用程序将使用区域和终端节点信息在指定区域创建 DynamoDB 表,并使用指定的终端节点执行后续的表操作请求。

  1. 切换到井字游戏应用程序下载到的文件夹。

  2. 在应用程序的根目录文件夹中,使用以下内容创建名为 beanstalk.config 的文本文件:

    Copy
    [dynamodb] region=<AWS region> endpoint=<DynamoDB endpoint>

    例如,您可以使用以下内容:

    Copy
    [dynamodb] region=us-west-2 endpoint=dynamodb.us-west-2.amazonaws.com

    有关可用区域的列表,请转到 Amazon Web Services 一般参考 中的 Amazon DynamoDB

    重要

    在配置文件中指定的区域是井字游戏应用程序在 DynamoDB 中创建 Games 表的位置。您必须在同一区域中创建将在下一部分中讨论的 Elastic Beanstalk 应用程序。

    注意

    创建 Elastic Beanstalk 应用程序时,您将请求启动一个可以在其中选择环境类型的环境。要测试井字游戏示例应用程序,您可以选择 Single Instance (单实例) 环境类型,跳过后面的内容,然后转到下一步。

    但请注意,Load balancing, autoscaling 环境类型提供了高度可用和可扩展的环境,在您创建和部署其他应用程序时应考虑这一点。如果您选择此环境类型,则需要生成 UUID 并将其添加到配置文件中,如下所示:

    Copy
    [dynamodb] region=us-west-2 endpoint=dynamodb.us-west-2.amazonaws.com [flask] secret_key= 284e784d-1a25-4a19-92bf-8eeb7a9example

    在客户端和服务器通信中,出于安全考虑,服务器在发送响应时会发送签名 Cookie,客户端在下一个请求中将其发送回服务器。只有一台服务器时,服务器可在启动时在本地生成加密密钥。有多台服务器时,所有服务器都需要知道相同的加密密钥,否则,它们将无法读取由对等服务器设置的 Cookie。通过将 secret_key 添加到配置文件,我们告知服务器使用此加密密钥。

  3. 压缩应用程序的根文件夹的内容 (其中包括 beanstalk.config 文件),例如,TicTacToe.zip

  4. .zip 文件上载到 Amazon Simple Storage Service (Amazon S3) 存储桶。在下一节中,您将此 .zip 文件提供给 Elastic Beanstalk 以上传到一台或多台服务器。

    有关如何上传到 Amazon S3 存储桶的说明,请转到 Amazon Simple Storage Service 入门指南 中的创建存储桶将对象添加到存储桶

3.4:设置 AWS Elastic Beanstalk 环境

在此步骤中,您将创建 Elastic Beanstalk 应用程序,这是包括环境的组件集合。在本示例中,您将启动一个 Amazon EC2 实例以部署和运行您的井字游戏应用程序。

  1. 键入以下自定义 URL 以设置 Elastic Beanstalk 控制台,用于设置环境:

    Copy
    https://console.aws.amazon.com/elasticbeanstalk/?region=<AWS-Region>#/newApplication ?applicationName=TicTacToeyour-name &solutionStackName=Python &sourceBundleUrl=https://s3.amazonaws.com/<bucket-name>/TicTacToe.zip &environmentType=SingleInstance &instanceType=t1.micro

    有关自定义 URL 的更多信息,请转到构建 Launch Now URL,该内容位于 AWS Elastic Beanstalk 开发人员指南。对于 URL,请记录以下内容:

    • 您需要提供 AWS 区域名称 (与您在配置文件中提供的名称相同) 、Amazon S3 存储桶名称以及对象名称。

    • 在测试中,URL 会请求 SingleInstance 环境类型,使用 t1.micro 作为实例类型。

    • 应用程序名称必须唯一。因此,在上述 URL 中,我们建议您将 applicationName 放在您的名字之后。

    执行此操作将打开 Elastic Beanstalk 控制台。在部分情况下,您可能需要登录。

  2. 在 Elastic Beanstalk 控制台中,选择 Review and Launch,然后选择 Launch

  3. 记录 URL 供以后引用。此 URL 可打开您的井字游戏应用程序主页。

  4. 配置井字游戏应用程序,向其提供配置文件的位置。

    Elastic Beanstalk 创建应用程序之后,选择 Configuration

    1. 选择 Software Configuration 旁的齿轮框,如以下屏幕截图中所示。

    2. Environment Properties 部分的最后,键入 CONFIG_FILE 及其值 beanstalk.config,然后选择 Save

      此环境的更新可能需要几分钟才能完成。

    更新完成后,您可以开始玩游戏。

  5. 在浏览器中,键入上一步中复制的 URL,如以下示例中所示。

    Copy
    http://<pen-name>.elasticbeanstalk.com

    此操作会打开应用程序主页。

  6. 以 testuser1 身份登录,然后选择 CREATE 以启动新的井字游戏。

  7. Choose an Opponent (选择对手) 框中键入 testuser2

  8. 打开另一个浏览器窗口。

    确保您在浏览器窗口中清除了所有 Cookie,这样您才不会作为同一用户登录。

  9. 键入同一 URL 以打开应用程序主页,如以下示例中所示:

    Copy
    http://<env-name>.elasticbeanstalk.com
  10. 以 testuser2 身份登录。

  11. 对于等待接受邀请列表中来自 testuser1 的邀请,选择 accept

  12. 现在将显示游戏页面。

    testuser1 和 testuser2 可以一起玩游戏。对于每一步移动,应用程序都会将其保存到 Games 表中的对应项目。