我有几个使用 AWS Console 创建的AWS Lambda函数,每个函数都有一些相关的API。现在,我想使用CodeBuild,CodePipeline和CloudFormation将它们与 AWS CI / CD集成在一起。 。但是问题是我无法更新未使用CloudFormation堆栈创建的现有lambda函数。
错误消息 ABC_Lambda已存在
请注意,如果我使用CI / CD流创建一个新的lambda,然后尝试对其进行更新,则可以正常工作。
我的问题是
如何在不删除和重新创建现有Lambda函数的情况下将它们与AWS CI / CD工作流集成在一起?
是否有任何方法或SAM_template配置参数强制CloudFormation更新现有lambda(使用AWS创建的 控制台/ AWS命令行工具)。
答案 0 :(得分:2)
如@omuthu所述,如果您尚未使用Cloudformation创建Lambda,则无法使用Cloudformation更新它们。
您可以做的是,在您的CodeBuild步骤中,使用update-function-code
和update-function-configuration
API来执行所需的操作。但是由于上述限制,这不允许您与SAM集成。
答案 1 :(得分:1)
AWS CloudFormation只能更新由同一堆栈创建的资源。
我唯一想到的就是拥有CloudFormation自定义资源。
自定义资源lambda应该处理所有不是由堆栈创建的资源。
在这里详细了解(https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html)
Ho,这很有帮助!
答案 2 :(得分:0)
我会将您在控制台中创建的Lambda函数视为原型,并逐步构建CloudFormation堆栈来替换原型。避免出现错误消息(ABC_Lambda已经存在)的技巧是仅在CloudFormation中指定逻辑名称,然后让其分配物理名称。如果按名称或API Gateway端点调用Lambda函数,则在准备切入新堆栈时需要更新调用方。
答案 3 :(得分:0)
如果出于遗留原因确实需要保留旧的lambda函数,则可以在Cloudformation中创建新函数,然后手动将旧函数更新为“代理”并执行新的lambda代码。
但是,您将为第二个lambda产生额外费用-并可能达到并发的lambda请求限制。
随着时间的流逝,您可以更新旧的配置/代码以仅调用新功能,并最终完全删除旧功能。