title: 创建 Lambda 函数 url: /flexmatch/lab21 weight: 20 pre: “2-1. ”
如果我们部署了 CloudFormation 堆栈,Lambda 函数和 API Gateway 已经创建完成。我们应该放置这些资源所需的部分。
在上一部分中,我们已经为全栈游戏创建了 AWS 服务。从现在开始,我们将创建 Lambda 函数来处理游戏流程。
在本实验中,我们将创建三个 Lambda 函数。
让我们创建第一个。
在控制台中转到 Lambda 菜单。https://console.aws.amazon.com/lambda
点击"创建函数"按钮并创建第一个函数。
选择"从头开始创作”,并创建空函数。
将名称设为 game-sqs-process。
选择 Python 3.9 作为运行时。
在权限选项卡中,选择"使用现有角色"并选择"Gomok-game-sqs-process”。执行"创建函数”。
完成后,在设计器组中选择 SQS(Simple Queue Service)作为此函数的触发器。然后我们可以在下方创建"配置触发器"组。
基本设置:128MB 内存和 1 分钟超时
代码:复制 GameResultProcessing.py 的内容并粘贴到 Lambda 函数中。为我们的实验更改适当的 region_name。(例如:ap-northeast-2)
请检查 Lambda 函数的 Handler。Lambda 函数执行时可以访问此处理程序。
在本实验中,我们提供 Python 包以方便使用。对于源代码 GetRank.py 和 Scoring.py,请参考提供的二进制文件夹中的 Lambda / LambdaDeploy。或者我们也可以自己导入 redis 模块。我们可以在这里 找到下载二进制文件的位置。
第二个 Lambda 函数将通过上传 Python 包来创建。 与第一个仅使用 Python 标准 SDK 进行逻辑处理的函数不同,某些 Lambda 函数使用外部库,如 Redis。 因此,我们使用部署包来创建 lambda 函数。
这将是一个很好的机会来使用包创建 lambda 函数。
我们可以在 Lambda/LambdaDeploy 下看到两个 Python 文件 GetRank.py 和 Scoring.py。
将文件夹中的所有文件压缩为名称"LambdaDeploy.zip”(注意:压缩文件中不应包含 LambdaDeploy。GetRank.py 和 Scoring.py 应位于压缩文件的根路径)
我们可以使用此部署包创建 Lambda 函数。
点击"创建函数"并选择"从头开始创作"来创建函数。
将名称设为 game-rank-update,运行时设为 Python 3.9,角色设为 Gomok-game-rank-update。点击创建函数按钮。
在函数代码组中选择上传 .ZIP 文件,并上传 LambdaDeploy.zip。
将处理程序设为 Scoring.handler,并为环境变量设置 ElastiCache 端点(我们之前创建的),如下所示。
使用这些环境变量,我们可以安全有效地管理端点,而无需硬编码。
将函数超时设置为 1 分钟。
在函数配置中将 VPC 设置为与 ElastiCache 相同。选择我们之前创建的所有子网和安全组(GomokuDefault)。
最后,让我们创建第三个 Lambda 函数。它可以用相同的方式创建。
使用"从头开始创作"创建 Lambda 函数。
将函数名称设为 game-rank-reader,运行时设为 Python 3.9,角色设为 Gomok-game-rank-reader。
点击创建函数,在操作菜单中选择"上传 .ZIP 文件”。为此函数上传 LambdaDeploy.zip。
在函数代码处理程序中输入 GetRank.handler。设置与之前相同的环境变量。
在基本设置中将超时设置为 1 分钟。将 VPC 配置为与 ElastiCache 所在的 VPC 相同。选择我们之前创建的所有子网和安全组。
保存并完成 Lambda 函数。
现在我们可以检查三个 Lambda 函数是否已创建。(如果我们尝试了 CloudFormation,那么应该有五个)
Lambda 函数已准备就绪!接下来,我们考虑如何运行这些函数。 前两个函数由 SQS 和 DynamoDB 触发,但我们尚未为最后一个函数指定触发器。
我们将为此函数使用 API Gateway。让我们创建 API Gateway!
如果我们完成了本页面,我们可以测试我们创建的组件如何工作。
当 SQS 接收数据时,Lambda 函数将被触发。该函数将数据更新到 DynamoDB。
更新到 DynamoDB 的数据通过 DynamoDB Stream 触发另一个 Lambda 函数。该函数更新 Redis 缓存以用于排行榜。
我们可以简单地测试这个过程。
{ "PlayerName" : "SomeName" , "WinDiff" : 1, "LoseDiff" : 0, "ScoreDiff" : 100 }
© 2020 Amazon Web Services, Inc. 或其附属公司,保留所有权利。