在 AWS Lambda 上监控 Python 3.6 函数

Amazon Web Services (AWS) Lambda 是一个基于使用的执行环境,可以运行 Python 3.6 代码。如果您以前从未使用过 AWS Lambda,那么您可以阅读
如何创建您的第一个 Python 3.6 AWS Lambda 函数。但是,即使您完全不熟悉 AWS,本教程也会为您提供要遵循的每个步骤。

在这篇文章中,我们将使用托管监控服务 Rollbar 监控在 AWSLambda 上运行的 Python 代码。

所需的工具和代码

学习本教程不需要本地开发环境。所有工作都将通过 AWS 控制台在网络浏览器中进行。

示例代码可以从这篇博文中复制和粘贴,或者您可以在 GitHub 上的 monitor-aws-lambda-python-3-6 目录中的 Full Stack Python blog-post-examples 存储库下访问它。

访问 AWS Lambda 服务

登录您现有的 AWS 账户或注册一个新账户。 AWS Lambda 提供免费套餐,因此您可以免费测试代码和执行基本应用程序。

AWS Lambda 着陆页。

AWS 提供大量服务,因此使用搜索框输入“lambda”并在出现相应的起始页时选择“Lambda”。

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

单击“创建函数”按钮。

创建 Lambda 函数屏幕。

选择“从头开始创作”。填写一个名称,以便您可以轻松识别此功能以供将来参考。我选择了“monitorPython3”。为运行时选择“Python 3.6”。

选择“从模板创建新角色”,输入角色名称,例如“basicEdgeLambdaRole”。对于策略模板,选择“Basic Edge LambdaPermissions”。

然后点击“创建函数”。

名为 monitorPython3 的空白 AWS Lambda 函数。

好的,我们终于到达了可以编写代码的配置屏幕。

编写 Python 函数

向下滚动到“函数代码”用户界面部分。

粘贴或输入以下代码,替换文本框中已有的代码。

import os
import rollbar


ROLLBAR_KEY = os.getenv('ROLLBAR_SECRET_KEY', 'missing Rollbar secret key')
rollbar.init(ROLLBAR_KEY, 'production')


@rollbar.lambda_function
def lambda_handler(event, context):
    message = os.getenv("message")
    print_count = int(os.getenv("print_count"))

    # check if message exists and how many times to print it
    if message and print_count > 0:
        for i in range(0, print_count):
            # formatted string literals are new in Python 3.6
            print(f"message: {message}.")
        return print_count
    return None

代码包含所需的lambda_handler 函数。 lambda_handler 是 Lambda 的挂钩,用于确定从何处开始执行代码。

Python 代码需要两个环境变量,它们由os 模块使用getenv 函数读取。 messageprint_count 变量由环境变量设置。

Lambda 函数中的 Python 3.6 代码。

在这个功能配置界面的代码输入文本框下方有一个设置环境变量键值对的部分。我们需要输入两个环境变量,然后我们才能运行我们的代码。

输入名为 message 且值为 Hello World! 的键。然后输入 print_count 作为第二个键,值为 5

我们的 Python 代码的错误处理不够健壮。 print_count 变量中的非数字值将导致脚本在执行时抛出异常,这是由于通过 强制转换 print_count ### 函数。我们将使用在此强制转换期间可能发生的异常作为一个简单的示例,展示当我们的代码在 Lambda 函数执行期间发生错误时会发生什么。

点击右上角的“保存”按钮。使用默认的“Hello World”测试模板值并将其命名为“testHelloWorld”。我们的函数不需要任何这些值。

为您的 Lambda 函数配置一个空的测试事件。

单击“创建”,将创建您的测试模板。现在单击“测试”以运行该功能。您应该看到“执行结果:成功”,并且 message 变量打印了五次。

当 print_count 变量为整数值时,执行成功。

现在将print_count 的值更改为i dunno。保存函数并再次单击“测试”。该功能将失败。

当我们没有 print_count 变量的整数值时,执行失败。

当我们在控制台中工作时,很明显发生了一个错误。然而,在大多数情况下,错误会偶尔发生,这就是为什么我们需要一个监控系统来捕获和报告这些异常。

监控我们的 Lambda 函数

前往 Rollbar 主页获取一个免费帐户并获取必要的信息,以将他们的托管监控服务添加到我们的 Lambda 应用程序中。

滚动条主页。

点击右上角的“注册”。输入您的电子邮件地址、用户名和所需密码。

在您的浏览器中注册一个 Rollbar 帐户。

在注册页面之后,您将看到入职流程,您可以在其中输入项目名称并选择编程语言。对于“Full Stack Python”中的项目名称类型,然后选择您正在监控基于 Python 的应用程序。

将您的项目命名为“Full Stack Python”并选择 Python 作为您的语言。

点击屏幕底部的“继续”。下一页向我们展示了一些关于如何添加监控的说明。

使用服务器端访问令牌配置项目。

记下该服务器端访问令牌,因为我们需要将其设置为 AWS Lambda 上的环境变量。

我们现在可以更新我们的 Python 函数来收集和汇总应用程序中发生的错误。将以下突出显示的行添加到您的 Lambda 代码中:

import os
import rollbar


ROLLBAR_KEY = os.getenv('ROLLBAR_SECRET_KEY', 'missing Rollbar secret key')
rollbar.init(ROLLBAR_KEY, 'production')


@rollbar.lambda_function
def lambda_handler(event, context):
    message = os.getenv("message")
    print_count = int(os.getenv("print_count"))

    # check if message exists and how many times to print it
    if message and print_count > 0:
        for i in range(0, print_count):
            # formatted string literals are new in Python 3.6
            print(f"message: {message}.")
        return print_count
    return None

上面突出显示的新代码行将 rollbar 库合并到我们的应用程序中,使用我们的环境变量设置 ROLLBAR_KEY 并使用 rollbar.lambda_function 装饰器来捕获我们的 lambda_handler 函数中的所有错误。

添加以下名为 ROLLBAR_SECRET_KEY 的第三个环境变量,这是来自新 Rollbar 项目的服务器端令牌。

将您的 Rollbar 服务器端密钥添加到 Lambda 环境变量中。

Lambda 上的这个函数目前只有一个问题:Lambda 无法知道 Rollbar 包代码。需要包括外部 Rollbardependency。有几种方法可以处理这个问题:

  1. 从 GitHub 存储库下载这个预制的 zip 文件,其中包括所有 Rollbar 包代码和我们在 lambda_function.py 文件中的代码。
  2. 重新创建以上代码在您的本地系统上使用 pip 获取依赖项并在本地创建一个 zip 文件。

为了节省本教程的时间,我提供了预制的 zip 文件,所以现在就试试这个,这样我们就可以看到最终结果。在“函数代码”下,将“代码输入类型”从“编辑内联代码”更改为“上传 .ZIP 文件”。点击“函数包”下的“上传”按钮。

上传带有 Rollbar 依赖项的 ZIP 文件。

点击顶部的“保存”按钮。使用我们的新代码,我们现在可以看到 ifRollbar 将捕获并报告异常。点击“保存”按钮,然后点击“测试”。

函数将按预期失败。如果我们转到我们的 Rollbardashboard 并刷新页面,我们会看到异常。

带有异常的滚动条用户界面。

现在我们可以跨许多函数跟踪 Lambda 异常,无论它们运行的​​频率如何。

下一步是什么?

我们刚刚在 AWS Lambda 上编写并执行了一个 Python 3.6 函数,然后将异常消息捕获到我们的 Rollbar 日志中。现在您可以继续构建您的 Python 代码,因为您知道当出现问题时您将完全了解发生了什么。

查看 AWS Lambda 部分,了解其他开发人员提供的更多教程。

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

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

赞(0) 打赏

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

支付宝扫一扫打赏

微信扫一扫打赏