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

时间:2018-01-04 16:16:30

标签: git amazon-web-services lambda

我有源代码,它们存在于Git仓库(GitHub)中。我有几个不同环境的分支(例如developproduction),我更喜欢使用受保护的分支来管理GitHub接口内的版本。

我想推送分支来触发测试和部署。

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

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

{
  "Type" : "AWS::Lambda::Function",
  "Properties" : {
    "Code": "source code here"
  }
}

...其中Code是“亚马逊简单存储服务(Amazon S3)存储桶或将源代码指定为内嵌文本。”(Docs

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

  • $BRANCH
  • 上查看来自$REPO的最新AWS Lambda代码
  • 运行任何测试
  • 运行我的构建&包脚本
  • 将代码上传到AWS Lambda

(这可以在CI提供商中完成,但我仍然需要点击每个仓库的“重建”)

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

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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 更新你的git repo
  2. 触发新代码的构建
  3. 将您的工件(包)上传到S3,永远不会覆盖旧工件(例如,上传到/artifacts/{build number}/MyLambda.zip
  4. 触发CloudFormation部署
  5. 作为第4步的一部分,您可以将步骤3中创建的工件的位置作为参数传递到CloudFormation堆栈,并使用这些参数构建Lambda源代码位置。

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