如何告知所有AWS EC2实例从git / codecommit中提取?

时间:2015-08-15 20:30:00

标签: git amazon-web-services amazon-ec2 aws-codecommit

我正在使用AWS CodeCommit,它看起来像是git的精简版。

如果所有这些EC2实例都具有相同的角色标记,我该如何实现?

我不想做任何花哨的事情,我想要的只是指定一个标签,点击一个按钮,所有那些带有该标签的EC2实例都为CodeCommit提取。我想从我的本地机器上做到这一点。

我知道我需要使用SSH密钥访问每个EC2服务器中的CodeCommit,并在每个服务器上安装git(我将其加入AMI)。我只是不确定如何触发"每个EC2机器做一个git pull?是否有AWS命令?

我不是开发人员,只知道基本的linux和php。

2 个答案:

答案 0 :(得分:12)

对于使用IAM角色启动的EC2实例,您甚至不必使用SSH密钥进行烘焙。 Git可以从EC2实例元数据中获取CodeCommit凭据。使用最新的AWS CLI包和〜/ .gitconfig中的以下行烘焙基于Linux的AMI:

[credential]
    helper = !aws --profile default codecommit credential-helper $@
    UseHttpPath = true

启动附加了IAM角色的实例,然后您可以克隆CodeCommit仓库,而无需再进行任何设置。

如果您想根据标签在一组EC2实例上运行git命令,您可能需要查看CapistranoCapify-EC2

更新: 如果您打开使用AWS OpsWorks从CodeCommit部署,那么recent blog article就如何做到这一点。您还可以在使用Capistrano的实例中使用OpsWorks run arbitrary commands

答案 1 :(得分:4)

您与AWS托管服务最接近的是 CodeDeploy 。有了它,您可以通过命令行或Web控制台协调 EC2 实例中的部署。但到目前为止, CodeDeploy 只是从 S3 GitHub 中提取工件。到目前为止, CodeCommit 似乎与其他相关的亚马逊服务完全隔离,例如 CodePipeline < em> CodeDeploy ,所以它似乎不是一个好的选择。但是,当然,亚马逊的路线图是整合所有这些(不这样做会毫无意义)。所以,现在,你最好使用 GitHub 而不是 CodeCommit

但是,考虑到您没有使用 GitHub ,那么您需要在存储库和 CodeDeploy 之间使用 CI (持续集成)解决方案,来自源代码的代码,可能构建或运行测试,将其推送到 S3 并告诉 CodeDeploy 。例如,有CodeShip可以做到这一点,并与许多外部服务集成。或者您甚至可以拥有自己的 CI 服务器,例如 Jenkins ,这样做&#34;粘合&#34;你的角色。 (詹金斯可能是最灵活的一个,因为它是开源的,并且可能有所有插件。)

所以,稍微分解一下,你的工作流程会是这样的:

  • 将代码推送到您的存储库;
  • 每当发生事件(某个分支上的提交或新标记,它应该是可配置的)时,您的 CI 会提取它,运行您想要或需要的任何内容(构建,测试,打包),并将其推送到 S3 (通常作为tarball文件);
  • 取决于您设置的方式, CI 告诉代码部署立即将其部署到您的 EC2 实例上,或者只是告诉它有可用的新版本,并允许您随时通过Web控制台上的CLI手动触发部署。

(实际上, CodeDeploy 不会将代码推送到 EC2 实例。而是每个 EC2 实例必须运行代理池定期 CodeDeploy 服务器,以了解是否有新的东西在本地应用。无论如何, CodeDeploy 协调并从代理获得反馈,所以它只是作为如果 CodeDeploy 侧100%有效,实例侧100%无源。)

最干净&#34;清洁&#34; AWS解决方案将 CodeCommit - &gt; CodePipeline - &gt; CodeDeploy ,或只是 CodeCommit - &gt; CodeDeploy ,但这些服务目前还没有完全集成。

在您的情况下,现在最简单可行的解决方案是 Github - &gt; CodeDeploy 。任何不同的东西都需要一些中间步骤,比如我提供的示例( CodeShip Jenkins 等)。