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