修改运行时环境 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

修改运行时环境

您可以使用内部扩展来修改运行时进程。内部扩展不是单独的进程 – 其作为运行时进程的一部分运行。

Lambda 提供特定语言的环境变量,您可以设置此变量,向运行时添加选项和工具。Lambda 还提供包装程序脚本,此脚本允许 Lambda 将运行时启动委托给脚本。您可以创建包装脚本来自定义运行时启动行为。

特定于语言的环境变量

Lambda 支持仅配置方法,以便在函数初始化期间通过以下特定语言的环境变量预加载代码:

  • JAVA_TOOL_OPTIONS – 在 Java 上,Lambda 支持此环境变量以在 Lambda 中设置其他命令行变量。此环境变量允许您指定工具的初始化,特别是使用 agentlibjavaagent 选项启动本机或 Java 编程语言代理。有关更多信息,请参阅JAVA_TOOL_OPTIONS环境变量

  • NODE_OPTIONS – 在 Node.js 运行时系统中可用。

  • DOTNET_STARTUP_HOOKS – 在 .NET Core 3.1 及更高版本中,此环境变量指定了 Lambda 可以使用的程序集 (dll) 的路径。

使用特定于语言的环境变量是设置启动属性的首选方法。

包装脚本

您可以创建一个包装程序脚本,自定义 Lambda 函数的运行时启动行为。使用包装脚本,您可以设置无法通过特定于语言的环境变量设置的配置参数。

注意

如果包装脚本未成功启动运行时进程,则调用可能会失败。

所有本机 Lambda 运行时系统都支持包装脚本。仅限操作系统的运行时系统provided 运行时系统系列)不支持包装脚本。

当您为函数使用包装程序脚本时,Lambda 会使用您的脚本启动运行时。Lambda 会向脚本发送解释器的路径以及标准运行时启动的所有原始参数。您的脚本可以扩展或转换程序的启动行为。例如,脚本可以注入和更改参数、设置环境变量或捕获指标、错误和其他诊断信息。

您可以通过将 AWS_LAMBDA_EXEC_WRAPPER 环境变量的值设置为可执行二进制文件或脚本的文件系统路径来指定脚本。

示例:使用 Python 3.8 创建并使用包装脚本

在以下示例中,您创建一个包装脚本,以使用 -X importtime 选项启动 Python 解释器。当您运行该函数时,Lambda 会生成一个日志条目,显示每次导入的导入持续时间。

使用 Python 3.8 创建并使用包装脚本
  1. 要创建包装脚本,请将以下代码粘贴到名为 importtime_wrapper 的文件中:

    #!/bin/bash # the path to the interpreter and all of the originally intended arguments args=("$@") # the extra options to pass to the interpreter extra_args=("-X" "importtime") # insert the extra options args=("${args[@]:0:$#-1}" "${extra_args[@]}" "${args[@]: -1}") # start the runtime with the extra options exec "${args[@]}"
  2. 要授予脚本可执行文件权限,请从命令行输入 chmod +x importtime_wrapper

  3. 将脚本部署为 Lambda 层

  4. 使用 Lambda 控制台创建 Lambda 函数。

    1. 打开 Lambda 控制台

    2. 选择创建函数

    3. 基本信息 下,对于函数名称,输入 wrapper-test-function

    4. 对于运行时,选择 Python 3.8

    5. 选择创建函数

  5. 将层添加到函数。

    1. 选择您的函数,然后选择 Code (代码)(如果尚未选择)。

    2. 选择 Add a layer

    3. 选择层下,选择您之前创建的兼容层的名称版本

    4. 选择添加

  6. 将代码和环境变量添加到您的函数中。

    1. 在函数代码编辑器中,粘贴以下函数代码:

      import json def lambda_handler(event, context): # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
    2. 选择 Save(保存)。

    3. Environment variables (环境变量) 下,选择 Edit (编辑)

    4. 选择 Add environment variable (添加环境变量)

    5. 对于 Key(键),输入 AWS_LAMBDA_EXEC_WRAPPER

    6. 对于 Value(值),输入 /opt/importtime_wrapper

    7. 选择 Save(保存)。

  7. 要运行该函数,请选择 Test(测试)。

    由于您的包装脚本使用 -X importtime 选项启动了 Python 解释器,因此日志会显示每次导入所需的时间。例如:

    ... 2020-06-30T18:48:46.780+01:00 import time: 213 | 213 | simplejson 2020-06-30T18:48:46.780+01:00 import time: 50 | 263 | simplejson.raw_json ...