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

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)

但这是相同的结果。您知道为什么未设置此环境变量吗?

谢谢 !

Dan*_*ell 5

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

这不是环境变量的工作方式,也不是 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)