AWS CodePipeline - 如何更新 Lambda 函数的代码?

3
我正在做一个看起来很简单的事情,但其中一步需要做一些相当hacky的事情,所以我猜应该有更好的方法。我有一组AWS lambdas(用Java编写,但这可能与此无关),我想将它们放入CI/CD中。所以我现在有一个源代码的codecommit仓库;我有一个codebuild作业,可以构建它们并更新lambda的gamma版本。然后我有另一个包含集成测试的codecommit仓库,以及执行测试并运行它们的codebuild作业(如果测试失败,则构建失败)。我用codepipeline将它们连接在一起,一切都很好!
除了如果测试通过,我想自动更新生产lambda的功能代码。我唯一能想到的方法是创建第三个codebuild作业,并运行一个buildspec.yml,其中什么也不做,只运行“aws lambda update-function-code”。这似乎非常不对。在codepipeline中有没有一种直接使用管道中的工件来直接更新lambda函数代码的方法?
我看到我可以将cloudformation放入管线中,但那似乎需要一个新的cloudformation文件-我不想更新formation或lambda配置,只想更新代码。
更新:我一段时间使用了AWS推荐的方法,但必须放弃它。当您这样做时,它会将角色附加到cloudformation堆栈,除非附加的角色具有所需的权限,否则堆栈的任何未来手动更新都会失败。因此,您要么必须将完整的AWS访问权限授予CI/CD管道,要么在手动编辑堆栈并部署后遇到大量问题。
最终,对我而言更好的解决方案是简单地编写deployspec.yml文件,该文件需要一个工件并将其发送到lambda,将其放入我的lambda源代码仓库中,并将其作为构建阶段运行。问题解决了,它不会破坏我的cloudformation堆栈。

跟进:我曾经使用AWS推荐的方法一段时间,但不得不放弃。当你这样做时,它会将一个角色附加到CloudFormation堆栈上,除非所附加的角色具有所需的权限,否则堆栈的任何未来手动更新都会失败。因此,您要么必须为CI/CD管道提供完整的AWS访问权限,要么在手动编辑堆栈并部署它时会遇到很多麻烦。 - Bill Shubert
1个回答

2
AWS提供了一个非常好的用于Lambda函数的CI/CD管道教程[1]。该教程使用CodePipeline和CloudFormation。这是最佳建议方法,我强烈建议您使用它,即使您可能需要学习一些CloudFormation,但从长远来看,它将是值得的。
[1] https://docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html

谢谢!我已经阅读了您提供的文档,看起来重新运行云形成模板是推荐的方法。虽然不像我希望的那么简单,但它会起作用。 - Bill Shubert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接