如何创建您的第一个 Python 3.6 AWS Lambda 函数

Amazon Web Services (AWS) Lambda 提供基于使用情况的计算服务,用于运行 Python 代码以响应开发人员定义的事件。例如,如果入站 HTTP POST 进入 API 网关或新文件上传到 AWS S3,则 AWS Lambda 可以执行函数来响应该 API 调用或操作 S3 上的文件。

AWS Lambda 与用于创建匿名函数的 Python 语言的 lambda 表达式无关。 AWS Lambda 名称恰好与 lambda 关键字的名称发生冲突。

让我们学习如何快速编写和运行 Lambda 函数来执行使用环境变量作为输入的基本 Python 3.6 代码。此代码也可以在 GitHub 上的博客文章示例存储库下获得,可以更改以便您可以构建更复杂的 Python 程序。

我们的工具

除了 Web 浏览器之外,本教程不需要任何本地开发环境工具。所有工作都将通过他们的控制台在 AWS 上进行。

这些步骤也可以通过 boto3 库从命令行完成,但我们不会在本文中介绍。

如果使用 Python 2 而不是 Python 3 仍然是你的难题,请查看另一篇文章,其中展示了如何在 AWS Lambda 上执行 Python 2.7 代码。

AWS Lambda 的第一步

注册一个新的 Amazon Web Services 账户,它提供了一个慷慨的免费套餐,或者使用您现有的 AWS 账户。

AWS Lambda 登陆和登录屏幕。

注册后可能会弹出一些教程,但跳过它们并转到主控制台。 AWS 有大量服务,每个月都会添加更多服务,因此使用搜索框是最好的解决方法。选择搜索文本框,输入“lambda”并选择“Lambda”以转到 Lambda 起始页。

在仪表板文本框中搜索 lambda。

单击“创建 Lambda 函数”按钮。将出现“选择蓝图”页面。

选择蓝图 Lambda 屏幕。

选择“Blank Function”,“Configure triggers”页面将会出现。起初我并不明显,但实际上你不需要配置触发器来继续。触发器是 Lambda 函数通常如何根据来自其他 AWS 服务(例如 API 网关或 Cloudwatch)的事件知道何时执行。

配置 Lambda 触发屏幕。

我们不会为此功能配置触发器,因为我们可以在完成配置后手动启动 Lambda 以对其进行测试。将触发器图标留空,然后单击“下一步”按钮继续。

Lambda 配置屏幕。

接下来我们进入“配置功能”屏幕,我们终于可以在这里编写一些代码了!

我们的 Lambda 函数的 Python 代码

输入 Lambda 函数的名称,例如“python_3_6_lambda_test”,以及描述。描述是可选的,但当您有几十个或数百个不同的 Lambda 函数并且需要让它们保持直截了当时,它很有用。在运行时下拉列表中,选择 Python 3.6 作为编程语言。

输入名称、描述并为 Lambda 使用 Python 3.6。

在“运行时”下拉列表下方有一个用于代码的大文本框,其中预先填充了一个lambda_handler 函数定义。 “代码条目类型”下拉列表也可以更改为允许上传 ZIP 文件或从 S3 存储桶输入文件。对于我们简单的 firstLambda 函数,我们将坚持使用“编辑内联代码”选项。复制或键入以下代码,替换文本框中已有的代码。此代码也可在此开源 GitHub 存储库中获得。

import os


def lambda_handler(event, context):
    what_to_print = os.environ.get("what_to_print")
    how_many_times = int(os.environ.get("how_many_times"))

    # make sure what_to_print and how_many_times values exist
    if what_to_print and how_many_times > 0:
        for i in range(0, how_many_times):
            # formatted string literals are new in Python 3.6
            print(f"what_to_print: {what_to_print}.")
        return what_to_print
    return None

上面的代码包含一个必需的lambda_handler 函数,它是AWS Lambda 定义的钩子,因此它知道从哪里开始执行。将lambda_handler 视为一个main 函数,就像Python 文件中常用的
if __name__ == "__main__": 条件行以确保从命令行运行脚本时会执行一段代码。

Python 代码需要两个环境变量,它们由os 模块使用environ.get 函数读取。通过环境变量设置的 what_to_printhow_many_times 变量,我们的代码然后根据 # 中定义的数量打印一条消息零次或多次## 变量。如果消息至少打印一次,则该函数返回 how_many_times 字符串,如果未打印任何消息,则返回 what_to_print

在这个功能配置界面的代码输入文本框下方有一个设置环境变量键值对的部分。

输入名为what_to_printhow_many_times 的键,然后输入它们的值。 what_to_print 的值使用字符串消息,how_many_times 使用大于 0 的整数。我们的 Python 代码的错误处理不是很健壮,因此 how_many_times 变量中的数字以外的值将导致脚本在执行时由于强制转换 ## 而抛出错误# 通过 how_many_times 函数。

为 Lambda 函数设置环境变量的部分。

Python 3.6 代码和环境变量现已就位。在我们可以测试 Lambda 函数之前,我们只需要处理一些特定于 AWS 的设置。

执行我们的 Lambda 函数

将环境变量滚动到“Lambda 函数处理程序和角色”部分,其中包含更多必需的函数配置项。

将默认处理程序设置为 lambda_function.lambda_handler。从下拉列表中选择“从模板创建新角色”,然后在“角色名称”字段中输入“dynamodb_access”。在“策略模板”下选择“简单微服务权限”。

“简单微服务权限”允许我们的 Lambda 访问 AWS DynamoDB。我们不会在本教程中使用 DynamoDB,但该服务通常用作 Lambda 函数的永久或临时存储。

对于最终配置,保留默认处理程序,从简单微服务权限模板创建一个新角色,并使用唯一名称保存它。

我们的代码和配置已经到位,因此请单击页面右下角的“下一步”按钮。

查看 Lambda 配置。

审查屏幕向我们展示了我们的配置设置,以确保我们为新的 Lambda 函数选择了合适的值。向下滚动“创建函数”。

点击创建函数按钮继续。

成功消息应显示在“测试”按钮下方的下一页上。

执行屏幕上的测试按钮。

单击“测试”按钮以执行 Lambda。 Lambda 将提示我们提供一些数据来模拟将启动我们功能的事件。选择“Hello World”示例事件模板,其中包含一些键,但我们的 Lambda 不会在执行时使用它们。单击模式底部的“保存并测试”按钮。

Lambda 执行的示例事件模板。

向下滚动到“执行结果”部分,我们可以在其中看到我们的输出。

执行我们新的 Lambda 函数的结果。

日志输出向我们展示了函数的返回值,在这次执行中是来自 what_to_print 的字符串消息。根据 how_many_times 环境变量中设置的数量,我们还可以看到我们的打印函数产生了五倍于预期的输出。

后续步骤

您刚刚配置、编码并执行了您的第一个 Python 3.6 AWS Lambda 函数!当您对 Lambda 函数使用触发器时,Lambda 的真正威力就体现出来了,因此它会根据发生的事件执行。我们将在下一个教程中介绍这一点。

查看 AWS Lambda Full Stack Python 页面,了解其他人为使用 Python 的 Lambda 共享的其他示例和教程。

有问题吗?通过 Twitter@fullstackpython 或@mattmakai 与我联系。我也在 GitHub 上,用户名是 mattmakai。

这篇文章有问题吗?在 GitHub 上创建此页面的源代码并提交拉取请求。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏