我有一个由S3 put事件调用的Lambda函数,后者又需要处理对象并写入RDS上的数据库。我想在我的临时堆栈中测试一些东西,这意味着我有一个单独的存储桶,RDS上的不同数据库端点以及单独的IAM角色。
我知道如何手动配置lambda函数的事件源和IAM内容(在控制台中),我已经阅读了lambda别名和版本,但我没有看到任何支持提供操作参数(比如名称)目标数据库的基于每个别名。因此,当我对函数进行更改时,现在看起来我需要一个单独的函数副本用于登台和生产,我必须手动保持它们同步。代码中的所有逻辑都是相同的,当我调用源桶和密钥作为函数的参数时,我目前无法传递目标内容。
对于目标数据库信息,我可以在函数体中使用switch语句来检查原始S3存储桶并做出决定,但我讨厌让每个函数都必须在内部保留该映射。但是,这对DB凭据或IAM策略不起作用。
我想我可以使用SDK自动完成全部或大部分内容。有没有人为Lambda进行持续的集成式部署设置这样的东西,还是有一种更简单的方法来做我错过的?
答案 0 :(得分:3)
我找到了使用Lambda function aliases的解决方法。给定context
object,我可以获得invoked_function_arn
属性,该属性在结尾处具有别名(如果有)。
arn_string = context.invoked_function_arn
alias = arn_string.split(':')[-1]
然后我只使用别名作为我的config.py模块中dict的索引,我很高兴。
config[alias].host
config[alias].database
我不高兴的是,我每次都必须从别名调用我的函数,现在我不能在不影响此方案的情况下将别名用于任何其他目的。在上下文对象中明确支持用户参数会很好。