使用 Python boto3 设置或修改 AWS Lambda 环境变量
Set or modify an AWS Lambda environment variable with Python boto3
我想在我的 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()
但结果是一样的。
你知道为什么没有设置这个环境变量吗?
谢谢!
I need to save a value for the next call of my script.
这不是环境变量的工作方式,也不是 lambda 的工作方式。不能在父进程的子进程中设置环境变量 - 进程只能在其自身和子进程环境中设置环境变量。
如果您在 shell 设置环境变量,这可能会让您感到困惑,但在那种情况下,shell 是漫长的 运行ning 过程设置和获取您的环境变量,而不是它调用的程序。
考虑这个例子:
from os import environ
print environ['A']
environ['A'] = "Set from python"
print environ['A']
这只会为它自己设置 env A
。如果你 运行 多次,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
此外,即使情况并非如此,它也无法与 aws lambda 一起可靠地工作。 Lambda 运行 将您的代码放在当时可用的任何计算资源上;对于频繁执行的函数,它通常会缓存 运行 次,因此在这些情况下,可以将数据写入文件系统以保存它。但是,如果下一次调用不是在那 运行 时间内的 运行,您的数据就会丢失。
根据您的需要,您希望将数据保存在 lambda 之外。一些明显的选项是:写入 s3、写入 dynamo 或写入 sqs。下一次调用将从该位置读取,从而获得所需的结果。
AWS Lambda 仅使用给定的输入集执行代码段。执行后,它会 returns 输出,仅此而已。如果您想保留下一次调用的输出,那么您可能需要将其存储在 DB 或 Queue 中,如 Dan 所说。我个人将 SQS 与 SNS 结合使用,后者向我发送有关当前状态的通知。您甚至可以将最终结果(如成功或失败)存储在 SQS 中,您可以将其用于下一个触发器。就把选项丢在这里,剩下的就看你的需求了
考虑使用 boto3 lambda 命令,update_function_configuration 更新环境变量。
response = client.update_function_configuration(
FunctionName='test-env-var',
Environment={
'Variables': {
'env_var': 'hello'
}
}
)
我想在我的 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()
但结果是一样的。 你知道为什么没有设置这个环境变量吗?
谢谢!
I need to save a value for the next call of my script.
这不是环境变量的工作方式,也不是 lambda 的工作方式。不能在父进程的子进程中设置环境变量 - 进程只能在其自身和子进程环境中设置环境变量。
如果您在 shell 设置环境变量,这可能会让您感到困惑,但在那种情况下,shell 是漫长的 运行ning 过程设置和获取您的环境变量,而不是它调用的程序。
考虑这个例子:
from os import environ
print environ['A']
environ['A'] = "Set from python"
print environ['A']
这只会为它自己设置 env A
。如果你 运行 多次,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
此外,即使情况并非如此,它也无法与 aws lambda 一起可靠地工作。 Lambda 运行 将您的代码放在当时可用的任何计算资源上;对于频繁执行的函数,它通常会缓存 运行 次,因此在这些情况下,可以将数据写入文件系统以保存它。但是,如果下一次调用不是在那 运行 时间内的 运行,您的数据就会丢失。
根据您的需要,您希望将数据保存在 lambda 之外。一些明显的选项是:写入 s3、写入 dynamo 或写入 sqs。下一次调用将从该位置读取,从而获得所需的结果。
AWS Lambda 仅使用给定的输入集执行代码段。执行后,它会 returns 输出,仅此而已。如果您想保留下一次调用的输出,那么您可能需要将其存储在 DB 或 Queue 中,如 Dan 所说。我个人将 SQS 与 SNS 结合使用,后者向我发送有关当前状态的通知。您甚至可以将最终结果(如成功或失败)存储在 SQS 中,您可以将其用于下一个触发器。就把选项丢在这里,剩下的就看你的需求了
考虑使用 boto3 lambda 命令,update_function_configuration 更新环境变量。
response = client.update_function_configuration(
FunctionName='test-env-var',
Environment={
'Variables': {
'env_var': 'hello'
}
}
)