AWS CloudFormation 如何从 Git 中提取代码?

sdg*_*sdh 6 git lambda amazon-web-services

我有一个位于 Git 存储库(GitHub)中的源代码。我有几个用于不同环境的分支(例如developproduction),我更喜欢使用受保护的分支在 GitHub 界面内管理发布。

我想要推送到一个分支来触发测试和部署。

但是,我也使用 CloudFormation 以可重现的方式部署 AWS 服务。我的问题是将 CloudFormation 与我的 Git 进程连接起来。

例如,AWS Lambda 函数在 CloudFormation 模板中的描述如下:

{
  "Type" : "AWS::Lambda::Function",
  "Properties" : {
    "Code": "source code here"
  }
}
Run Code Online (Sandbox Code Playgroud)

... Code“Amazon Simple Storage Service (Amazon S3) 存储桶或将您的源代码指定为内嵌文本。”(文档

这意味着我需要在部署我的 CloudFormation 模板后执行一个手动步骤:

  • $BRANCH以下位置签出最新的 AWS Lambda 代码$REPO
  • 运行任何测试
  • 运行我的构建和打包脚本
  • 将代码上传到 AWS Lambda

(这可以在 CI 提供者中完成,但我仍然必须在每个 repo 上单击“重建”)

我宁愿做的是定义我的CI管道的CloudFormation模板。这应该可以使用 EC2 等,但我不知道如何。然后,Git 存储库 URL 将成为 CloudFormation 模板的参数。

如何在 CloudFormation 模板中定义 Git 挂钩、构建步骤和部署?这些步骤还应作为全新 CloudFormation 部署的一部分运行。

Mat*_*ser 1

通常,您不会将其构建为 CloudFormation 部署的一部分。构建发生在 CloudFormation 部署之前。

因此,作为 Ci 管道(不在 CloudFormation 中)的一部分,您将:

  1. 更新你的 git 仓库
  2. 触发新代码的构建
  3. 将您的工件(包)上传到 S3,切勿覆盖旧工件(例如,上传到/artifacts/{build number}/MyLambda.zip
  4. 触发 CloudFormation 部署

作为步骤 4 的一部分,您可以将步骤 3 中创建的工件的位置作为参数传递到 CloudFormation 堆栈中,并使用这些参数构建您的 Lambda 源代码位置。

此外,您还应该在 CloudFormation 模板中使用 Lambda 环境变量来指示开发/生产/暂存参数,并且不要将它们硬编码到您的 Lambda 包中。这允许您在 dev/prod/staging 之间重复使用相同的构建包。