Making Lambda Functions


title: 创建 Lambda 函数 url: /flexmatch/lab21 weight: 20 pre: “2-1.


如果我们部署了 CloudFormation 堆栈,Lambda 函数和 API Gateway 已经创建完成。我们应该放置这些资源所需的部分。

创建 Lambda 函数

在上一部分中,我们已经为全栈游戏创建了 AWS 服务。从现在开始,我们将创建 Lambda 函数来处理游戏流程。

在本实验中,我们将创建三个 Lambda 函数。

让我们创建第一个。

  1. 在控制台中转到 Lambda 菜单。https://console.aws.amazon.com/lambda

  2. 点击"创建函数"按钮并创建第一个函数。

  3. 选择"从头开始创作”,并创建空函数。

  4. 将名称设为 game-sqs-process

  5. 选择 Python 3.9 作为运行时。

  6. 在权限选项卡中,选择"使用现有角色"并选择"Gomok-game-sqs-process”。执行"创建函数”。

  7. 完成后,在设计器组中选择 SQS(Simple Queue Service)作为此函数的触发器。然后我们可以在下方创建"配置触发器"组。

  1. 检查 SQS 队列。它应该指示之前创建的 SQS 的 arn。

基本设置:128MB 内存和 1 分钟超时

  1. 让我们回到设计器组。我们正在创建 Lambda 函数。请参考源代码中的"GameResultProcessing.py”(根文件夹 > Lambda > GameResultProcessing.py)。

代码:复制 GameResultProcessing.py 的内容并粘贴到 Lambda 函数中。为我们的实验更改适当的 region_name。(例如:ap-northeast-2)

请检查 Lambda 函数的 Handler。Lambda 函数执行时可以访问此处理程序。

  1. 点击"保存"按钮创建函数。创建的函数读取存储在 SQS 中的游戏结果记录,并更新 DynamoDB。Lambda 函数持续轮询 SQS 队列,获取消息并更新 DynamoDB 表。

在本实验中,我们提供 Python 包以方便使用。对于源代码 GetRank.py 和 Scoring.py,请参考提供的二进制文件夹中的 Lambda / LambdaDeploy。或者我们也可以自己导入 redis 模块。我们可以在这里 找到下载二进制文件的位置。

第二个 Lambda 函数将通过上传 Python 包来创建。 与第一个仅使用 Python 标准 SDK 进行逻辑处理的函数不同,某些 Lambda 函数使用外部库,如 Redis。 因此,我们使用部署包来创建 lambda 函数。

这将是一个很好的机会来使用包创建 lambda 函数。

  1. 我们可以在 Lambda/LambdaDeploy 下看到两个 Python 文件 GetRank.py 和 Scoring.py。

  2. 将文件夹中的所有文件压缩为名称"LambdaDeploy.zip”(注意:压缩文件中不应包含 LambdaDeploy。GetRank.py 和 Scoring.py 应位于压缩文件的根路径)

  3. 我们可以使用此部署包创建 Lambda 函数。

  4. 点击"创建函数"并选择"从头开始创作"来创建函数。

  5. 将名称设为 game-rank-update,运行时设为 Python 3.9,角色设为 Gomok-game-rank-update。点击创建函数按钮。

  6. 在函数代码组中选择上传 .ZIP 文件,并上传 LambdaDeploy.zip。

  7. 将处理程序设为 Scoring.handler,并为环境变量设置 ElastiCache 端点(我们之前创建的),如下所示。
    使用这些环境变量,我们可以安全有效地管理端点,而无需硬编码。

  • 按如下方式填写环境变量"REDIS”。

  1. 将函数超时设置为 1 分钟。

  2. 在函数配置中将 VPC 设置为与 ElastiCache 相同。选择我们之前创建的所有子网和安全组(GomokuDefault)。

  1. 在上方的设计器组中选择 DynamoDB 作为触发器。

  1. 我们使用 DynamoDB 表"GomokuPlayerInfo"作为 Lambda 函数的配置触发器。如下设置 DynamoDB 触发器。勾选"启用触发器"并点击添加按钮。

  1. 完成后,点击"保存"按钮。现在,如果我们点击此函数的测试,它将失败。

最后,让我们创建第三个 Lambda 函数。它可以用相同的方式创建。

  1. 使用"从头开始创作"创建 Lambda 函数。

  2. 将函数名称设为 game-rank-reader,运行时设为 Python 3.9,角色设为 Gomok-game-rank-reader。

  3. 点击创建函数,在操作菜单中选择"上传 .ZIP 文件”。为此函数上传 LambdaDeploy.zip。

  4. 在函数代码处理程序中输入 GetRank.handler。设置与之前相同的环境变量。

  • 键:REDIS
  • 值:[ElastiCache 端点,不带端口号]
  1. 在基本设置中将超时设置为 1 分钟。将 VPC 配置为与 ElastiCache 所在的 VPC 相同。选择我们之前创建的所有子网和安全组。

  2. 保存并完成 Lambda 函数。

现在我们可以检查三个 Lambda 函数是否已创建。(如果我们尝试了 CloudFormation,那么应该有五个)

Lambda 函数已准备就绪!接下来,我们考虑如何运行这些函数。 前两个函数由 SQS 和 DynamoDB 触发,但我们尚未为最后一个函数指定触发器。

我们将为此函数使用 API Gateway。让我们创建 API Gateway!


Lambda 函数测试

如果我们完成了本页面,我们可以测试我们创建的组件如何工作。
当 SQS 接收数据时,Lambda 函数将被触发。该函数将数据更新到 DynamoDB。 更新到 DynamoDB 的数据通过 DynamoDB Stream 触发另一个 Lambda 函数。该函数更新 Redis 缓存以用于排行榜。

我们可以简单地测试这个过程。

  1. 打开控制台访问 SQS (https://console.aws.amazon.com/sqs)
  2. 选择 game-result-queue 并点击队列操作按钮。
  3. 从下拉菜单中点击发送消息。
  4. 在文本框中输入如下 JSON 数据。
{ "PlayerName" : "SomeName"  "WinDiff" : 1 "LoseDiff" : 0 "ScoreDiff" : 100 }
  • 如果有解析问题,请自己输入文本
  1. 点击"发送消息”
  2. 我们可以在 DynamoDB “GomokuPlayerInfo” 表中检查项目是否已更改。
  • 如果有问题,我们可以从 CloudWatch 调试日志。

© 2020 Amazon Web Services, Inc. 或其附属公司,保留所有权利。