使用AWS持续集成/部署更新现有Lambda函数

时间:2019-02-18 12:12:35

标签: amazon-web-services aws-lambda amazon-cloudformation aws-codepipeline aws-codebuild

我有几个使用 AWS Console 创建的AWS Lambda函数,每个函数都有一些相关的API。现在,我想使用CodeBuild,CodePipeline和CloudFormation将它们与 AWS CI / CD集成在一起。 。但是问题是我无法更新未使用CloudFormation堆栈创建的现有lambda函数。
错误消息 ABC_Lambda已存在

请注意,如果我使用CI / CD流创建一个新的lambda,然后尝试对其进行更新,则可以正常工作。

我的问题是

  
      
  1. 如何在不删除和重新创建现有Lambda函数的情况下将它们与AWS CI / CD工作流集成在一起?

  2.   
  3. 是否有任何方法或SAM_template配置参数强制CloudFormation更新现有lambda(使用AWS创建的   控制台/ AWS命令行工具)。

  4.   

4 个答案:

答案 0 :(得分:2)

如@omuthu所述,如果您尚未使用Cloudformation创建Lambda,则无法使用Cloudformation更新它们。

您可以做的是,在您的CodeBuild步骤中,使用update-function-codeupdate-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请求限制。

随着时间的流逝,您可以更新旧的配置/代码以仅调用新功能,并最终完全删除旧功能。