pal*_*aho 2 environment-variables amazon-web-services python-2.7 boto3 aws-lambda
我想在我的lambda脚本中设置或修改环境变量。我需要为脚本的下一次调用保存一个值。例如,我使用aws lambda控制台创建一个环境变量,并且不设置值。之后,我试试这个:
import boto3
import os
if os.environ['ENV_VAR']:
print(os.environ['ENV_VAR'])
os.environ['ENV_VAR'] = "new value"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的值将永远不会显示。我尝试了:
os.putenv()
Run Code Online (Sandbox Code Playgroud)
但这是相同的结果。您知道为什么未设置此环境变量吗?
谢谢 !
我需要为我的脚本的下一次调用保存一个值。
这不是环境变量的工作方式,也不是 lambda 的工作方式。不能在父进程的子进程中设置环境变量 - 进程只能在其自身和子进程环境中设置环境变量。
如果您在 shell 中设置环境变量,这可能会让您感到困惑,但在这种情况下,shell 是长时间运行的进程设置并获取您的环境变量,而不是它调用的程序。
考虑这个例子:
from os import environ
print environ['A']
environ['A'] = "Set from python"
print environ['A']
Run Code Online (Sandbox Code Playgroud)
这只会A为自己设置 env 。如果您多次运行它, 的初始值A始终是 shell 的值,而不是 python 设置的值。
$ export A="set from bash"
$ python t.py
set from bash
Set from python
$ python t.py
set from bash
Set from python
Run Code Online (Sandbox Code Playgroud)
此外,即使情况并非如此,它也无法与 aws lambda 一起可靠地工作。Lambda 在当时可用的任何计算资源上运行您的代码;它通常会缓存频繁执行的函数的运行时,因此在这些情况下,可以将数据写入文件系统以保留它。但是如果下一次调用不是在那个运行时运行,你的数据就会丢失。
根据您的需要,您希望在 lambda之外保留您的数据。一些明显的选项是:写入 s3、写入 dynamo 或写入 sqs。下一次调用将从该位置读取,达到预期的结果。
小智 5
考虑使用boto3 lambda命令update_function_configuration更新环境变量。
response = client.update_function_configuration(
FunctionName='test-env-var',
Environment={
'Variables': {
'env_var': 'hello'
}
}
)
Run Code Online (Sandbox Code Playgroud)