我正在做一个看起来很简单的事情,但其中一步需要做一些相当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堆栈。
除了如果测试通过,我想自动更新生产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堆栈。