Amazon web services aws cli lambda“更新函数配置”删除现有环境变量

Amazon web services aws cli lambda“更新函数配置”删除现有环境变量,amazon-web-services,aws-lambda,environment-variables,aws-cli,Amazon Web Services,Aws Lambda,Environment Variables,Aws Cli,关于下列国家的文件: …您只提供要更改的参数… 我认为这意味着其余的设置仍然保持不变。 但是,假设我的lambda函数有环境变量: var1=old_val1 var2=old_val2 var3=old_val3 然后当我尝试做这样的事情时: aws lambda update-function-configuration --function-name dummy_fun --environment '{"Variables":{"var1":"new_val1","var2":"new_v

关于下列国家的文件:

…您只提供要更改的参数…

我认为这意味着其余的设置仍然保持不变。 但是,假设我的lambda函数有环境变量:

var1=old_val1

var2=old_val2

var3=old_val3

然后当我尝试做这样的事情时:

aws lambda update-function-configuration --function-name dummy_fun --environment '{"Variables":{"var1":"new_val1","var2":"new_val2"}}'
为了更新变量: var1var2分别具有新值new_val1new_val2,虽然这两个变量确实得到了更新,但第三个变量var3被删除

我做错什么了吗?或者有没有办法确保这种情况不会发生

我完全可以使用一种变通方法来处理它,在这种方法中,我可以获取当前配置,然后在本地更新env变量,然后推送整个更新的配置,所有这些都是通过python代码实现的。
但是,这是唯一的办法吗?或者有更简单的方法吗?

您误解了文档的意图

您只提供要更改的参数

--environment
是您指定的应更改的(单数)“参数”——而不是单个变量


环境变量是整体配置的,因此没有只指定您希望不同的特定环境变量的概念。

我遇到了相同的问题,我只想更新函数的一个环境变量,而不想触及其余的环境变量

我最终在节点中编写了一个脚本并将其发布:

使用起来非常简单:

update-lambda-env KEY "My New Test Value" --stack-name myApplicationStack
这只会更改堆栈中函数中的变量 myApplicationStack

如果变量经常更改,更好的解决方案可能是使用AWS参数存储


说明:上面的命令将更新aws中lambda函数的环境变量。

Ok获得它。但我认为,我至少会尝试在boto上提高PR,比如说:
选择性更新功能配置
,尝试适应同样的情况:)无论如何,谢谢你的回复。干杯你可以试试。。。但是SDK倾向于对底层服务API进行非常紧密的建模。。。而且也不支持这一点。是的,这是真的。实际的API也会这样做。然而,依咪浩,这将是一件很好的事情:)哦,同意。是另一个例子,除了底层API更加严格,要求重新提交所有参数的完整副本(不仅仅是您想要更改的参数)。。。我强烈怀疑这是源于。酷酷的工具——恐怕它不能与多个嵌套堆栈一起工作。我有A包括B包括C,其中C是lambda堆栈。我可以将它应用于B(它将更新C),但不能应用于A。@Roelant我不确定我是否能够使它递归工作。您只需为每个堆栈调用脚本。在幕后它做了“aws cloudformation列出堆栈资源——堆栈名{mystack}”是的,最后在工具周围写了一个boto循环来获取正确的堆栈:)
aws lambda update-function-configuration --function-name my-function-name --environment Variables="{VAR1=variable_value, VAR2=variable_value}"