修改运行时环境
您可以使用内部扩展来修改运行时进程。内部扩展不是单独的进程 – 其作为运行时进程的一部分运行。
Lambda 提供特定语言的环境变量,您可以设置此变量,向运行时添加选项和工具。Lambda 还提供包装程序脚本,此脚本允许 Lambda 将运行时启动委托给脚本。您可以创建包装脚本来自定义运行时启动行为。
特定于语言的环境变量
Lambda 支持仅配置方法,以便在函数初始化期间通过以下特定语言的环境变量预加载代码:
-
JAVA_TOOL_OPTIONS
– 在 Java 上,Lambda 支持此环境变量以在 Lambda 中设置其他命令行变量。此环境变量允许您指定工具的初始化,特别是使用agentlib
或javaagent
选项启动本机或 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
环境变量的值设置为可执行二进制文件或脚本的文件系统路径来指定脚本。
示例:创建并使用包装脚本作为 Lambda 层
在以下示例中,您创建一个包装脚本,以使用 -X
importtime
选项启动 Python 解释器。当您运行该函数时,Lambda 会生成一个日志条目,显示每次导入的导入持续时间。
创建并使用包装脚本作为层
-
为层创建目录:
mkdir -p
python-wrapper-layer/bin
cdpython-wrapper-layer/bin
-
在
bin
目录中,将以下代码粘贴到名为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[@]}"
-
为脚本提供可执行文件权限:
chmod +x
importtime_wrapper
-
为层创建 .zip 文件:
cd .. zip -r ../
python-wrapper-layer.zip
. -
确认 .zip 文件具有以下目录结构:
python-wrapper-layer.zip └ bin └ importtime_wrapper
-
使用 .zip 包创建层。
-
使用 Lambda 控制台创建 Lambda 函数。
-
打开 Lambda 控制台
。 -
选择 Create function(创建函数)。
-
输入函数名称。
-
在运行时中,选择支持的最新 Python 运行时。
-
选择 Create function (创建函数)。
-
-
将层添加到函数。
-
选择您的函数,然后选择代码选项卡(如果尚未选择)。
-
向下滚动到层部分,然后选择添加层。
-
对于层源,选择自定义层,然后从自定义层下拉列表中选择您的层。
-
对于版本,选择 1。
-
选择 添加。
-
-
添加包装器环境变量。
-
选择配置,然后选择环境变量。
-
在 Environment variables (环境变量) 下,选择 Edit (编辑)。
-
选择 Add environment variable (添加环境变量)。
-
对于 Key(键),输入
AWS_LAMBDA_EXEC_WRAPPER
。 -
在值中,输入
/opt/bin/importtime_wrapper
(/opt/
+ .zip 层的文件夹结构)。 -
选择保存。
-
-
测试包装脚本。
-
选择测试选项卡。
-
在测试事件下,选择测试。您无需创建测试事件 – 默认事件将起作用。
-
向下滚动到日志输出。由于您的包装脚本使用
-X importtime
选项启动了 Python 解释器,因此日志会显示每次导入所需的时间。例如:532 | collections import time: 63 | 63 | _functools import time: 1053 | 3646 | functools import time: 2163 | 7499 | enum import time: 100 | 100 | _sre import time: 446 | 446 | re._constants import time: 691 | 1136 | re._parser import time: 378 | 378 | re._casefix import time: 670 | 2283 | re._compiler import time: 416 | 416 | copyreg
-