【发布时间】:2019-04-20 06:07:17
【问题描述】:
用例
我有一个 cloudformation 堆栈,其中包含超过 15 个 Lambda。我可以通过Codepipeline 部署堆栈,它由CodeCommit 和CodeDeploy 两个阶段组成。在这种方法中,我所有的 lambda 代码都在 cloudformation 模板中(即内联代码)。出于安全考虑,我想将此Inline 更改为S3,这又需要S3BucketName 和S3Key。
作为临时解决方法
到目前为止,我正在压缩每个 lambda 文件并手动将 S3keyName 和 bucketname 作为参数传递给我的堆栈。
有没有办法通过 Codepipeline 来完成这一步?
我对 CodeBuild 的假设
我知道我们可以使用CodeBuild。但到目前为止我已经看到CodeBuild 仅用于构建package.json 文件。但在我的用例中,我没有任何 .而且我还可以看到可以指定 cloudformation package 命令将我的 lambda 从本地包装到 S3,此命令将生成 S3 codeuri`,但这是针对将有单个 lambda 但在我的情况下我有 15 个的无服务器应用程序。
我的尝试
我知道,只要您将 git push 提供给 codecommit,它就会将您的代码保留在 S3 中。所以我想的是从codecommit推送文件中获取S3BucketName和S3KeyName并将这些参数传递给我的CFN模板。我可以得到S3BucketName 但S3KeyName 我不知道如何得到它?而且我不知道这种尝试过的方法是否可行?
顺便说一句,我知道我可以使用 shell 脚本来自动化这个过程。但是有没有办法通过 CODE PIPELINE 做到这一点?
更新——尝试过的无服务器方法
基本上,我使用两个独立运行的不同运行时(即 Nodejs、Python)运行两个构建操作。因此,当我使用无服务器方法时,每个构建都会创建一个 template-export.yml 文件,其中 codeuri 为 bucketlocation ,这意味着我将拥有 two template-export.yml files 。 Serverless 方法的一个问题必须是 create changeset 然后触发 Execute changeset。因此,我需要merge those two template-export.yml files 并运行此create changeset 操作,然后运行execute changeset。但我不知道是否有合并两个SAM templates 的命令。否则一个template-export.yml 堆栈将替换另一个template-export.yml 堆栈。
任何帮助表示赞赏 谢谢
【问题讨论】:
标签: amazon-web-services aws-code-deploy aws-codepipeline aws-codebuild aws-codecommit