首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python boto3设置或修改AWS Lambda环境变量

使用Python boto3设置或修改AWS Lambda环境变量
EN

Stack Overflow用户
提问于 2016-12-23 23:16:51
回答 3查看 9.7K关注 0票数 5

我想在lambda脚本中设置或修改一个环境变量。我需要为我的脚本的下一次调用保存一个值。例如,我使用aws lambda控制台创建了一个环境变量,但没有设置值。在那之后,我尝试这个:

代码语言:javascript
运行
复制
import boto3
import os

if os.environ['ENV_VAR']:
   print(os.environ['ENV_VAR'])
os.environ['ENV_VAR'] = "new value"

在这种情况下,我的值将永远不会打印出来。我尝试过:

代码语言:javascript
运行
复制
os.putenv()

但结果是一样的。您知道为什么没有设置这个环境变量吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-24 01:31:19

我需要为脚本的下一次调用保存一个值。

这不是环境变量的工作方式,也不是lambda的工作方式。不能在子进程中为父进程设置环境变量-进程只能在自己的和子进程环境中设置环境变量。

如果您在shell中设置环境变量,这可能会让您感到困惑,但在这种情况下,shell是长时间运行的进程设置并获取环境变量,而不是它调用的程序。

考虑这个例子:

代码语言:javascript
运行
复制
from os import environ
print environ['A']
environ['A'] = "Set from python"
print environ['A']

这将仅为其自身设置环境A。如果多次运行它,A的初始值始终是外壳的值,而不是python设置的值。

代码语言:javascript
运行
复制
$ 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。下一次调用将从该位置读取数据,从而获得所需的结果。

票数 5
EN

Stack Overflow用户

发布于 2017-07-15 00:50:41

考虑使用boto3 lambda命令update_function_configuration来更新环境变量。

代码语言:javascript
运行
复制
response = client.update_function_configuration(
            FunctionName='test-env-var',
            Environment={
                'Variables': {
                    'env_var': 'hello'
                }
            }
        )
票数 10
EN

Stack Overflow用户

发布于 2016-12-26 17:32:33

AWS Lambda只执行具有给定输入集的代码段。一旦执行,它就会返回输出,仅此而已。如果你想为下一次调用保留输出,那么你可能需要像Dan所说的那样将其存储在DB或Queue中。我个人将SQS与SNS结合使用,SNS向我发送有关当前状态的通知。您甚至可以在SQS中存储最终结果,如成功或失败,您可以将其用于下一个触发器。只是在这里抛出选项,rest完全取决于您的需求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41303880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档