我想在lambda脚本中设置或修改一个环境变量。我需要为我的脚本的下一次调用保存一个值。例如,我使用aws lambda控制台创建了一个环境变量,但没有设置值。在那之后,我尝试这个:
import boto3
import os
if os.environ['ENV_VAR']:
print(os.environ['ENV_VAR'])
os.environ['ENV_VAR'] = "new value"
在这种情况下,我的值将永远不会打印出来。我尝试过:
os.putenv()
但结果是一样的。您知道为什么没有设置这个环境变量吗?
谢谢!
发布于 2016-12-24 01:31:19
我需要为脚本的下一次调用保存一个值。
这不是环境变量的工作方式,也不是lambda的工作方式。不能在子进程中为父进程设置环境变量-进程只能在自己的和子进程环境中设置环境变量。
如果您在shell中设置环境变量,这可能会让您感到困惑,但在这种情况下,shell是长时间运行的进程设置并获取环境变量,而不是它调用的程序。
考虑这个例子:
from os import environ
print environ['A']
environ['A'] = "Set from python"
print environ['A']
这将仅为其自身设置环境A
。如果多次运行它,A
的初始值始终是外壳的值,而不是python设置的值。
$ export A="set from bash"
$ python t.py
set from bash
Set from python
$ python t.py
set from bash
Set from python
此外,即使不是这样,它也不能与aws lambda一起可靠地工作。Lambda在当时可用的任何计算资源上运行您的代码;它通常会缓存频繁执行的函数的运行时,因此在这些情况下,可以将数据写入文件系统以保留它。但是,如果下一次调用没有在该运行时中运行,您的数据将会丢失。
出于您的需要,您希望在lambda之外保留您的数据。一些明显的选项是:写到s3,写到发电机,或者写到sqs。下一次调用将从该位置读取数据,从而获得所需的结果。
发布于 2017-07-15 00:50:41
考虑使用boto3 lambda命令update_function_configuration来更新环境变量。
response = client.update_function_configuration(
FunctionName='test-env-var',
Environment={
'Variables': {
'env_var': 'hello'
}
}
)
发布于 2016-12-26 17:32:33
AWS Lambda只执行具有给定输入集的代码段。一旦执行,它就会返回输出,仅此而已。如果你想为下一次调用保留输出,那么你可能需要像Dan所说的那样将其存储在DB或Queue中。我个人将SQS与SNS结合使用,SNS向我发送有关当前状态的通知。您甚至可以在SQS中存储最终结果,如成功或失败,您可以将其用于下一个触发器。只是在这里抛出选项,rest完全取决于您的需求。
https://stackoverflow.com/questions/41303880
复制相似问题