我如何告诉我所有的 AWS EC2 实例从 git/codecommit 中提取?
How do I tell all my AWS EC2 instances to pull from git / codecommit?
我正在使用 AWS CodeCommit,它似乎是 git 的精简版。
如果所有这些 EC2 实例都具有相同的角色标签,我该如何实现?
我不想做任何花哨的事情,我只想指定一个标签,单击一个按钮,所有带有该标签的 EC2 实例将用于 CodeCommit。我想在我的本地机器上执行此操作。
我知道我需要将 SSH 密钥放入我的每台 EC2 服务器中以访问 CodeCommit,并在每台服务器上安装 git(我会将其烘焙到 AMI 中)。我只是不确定如何 "trigger" 每台 EC2 机器进行 git 拉取?有AWS命令吗?
我不是开发人员,只知道基本的 linux 和 php。
最接近 AWS 托管服务的是 CodeDeploy。有了它,您可以通过命令行或 Web 控制台在 EC2 实例中编排部署。但是到目前为止,CodeDeploy 只是从 S3 或 GitHub 中提取工件。到目前为止,CodeCommit 似乎与其他相关的亚马逊服务完全隔离,例如 CodePipeline和CodeDeploy,所以好像不是一个好的选择。但是,当然,亚马逊的路线图是整合所有这些(不这样做是没有意义的)。所以,现在,你最好使用 GitHub 而不是 CodeCommit.
但是,考虑到您没有使用 GitHub,那么您需要一个 CI(持续集成) 存储库和 CodeDeploy 之间的解决方案,从源代码中提取代码,可能构建或 运行ning 测试,将其推送到 S3 和告诉 CodeDeploy 这件事。 CodeShip, for example, which can do that, and integrates with a lot of external services. Or you could even have your own CI server, like Jenkins 正在为您扮演 "glue" 的角色。 (Jenkins 可能是最灵活的,因为它是开源的并且可能有适用于所有内容的插件。)
所以,稍微分解一下,您的工作流程将是这样的:
- 将代码推送到您的存储库;
- 只要有事件发生(某个分支上的提交,或者新标签,它应该是可配置的),你的 CI 拉它,运行 无论你想要或需要什么(构建、测试、打包),并将其推送到 S3(通常作为 tarball 文件);
- 根据您的设置方式,您的 CI 告诉 Code Deploy 将其部署到您的 EC2 实例,或者它只是告诉它有一个可用的新版本,并允许您随时通过 Web 控制台上的 CLI 手动触发部署。
(实际上,CodeDeploy 不会将代码推送到 EC2 个实例。相反,每个 EC2 实例必须 运行 一个定期汇集 CodeDeploy 服务器的代理,以便知道是否有新的东西要在本地应用。无论如何,CodeDeploy 协调并从代理那里获得反馈,所以它的工作方式就好像它在 CodeDeploy 端是 100% 活跃的,在实例端是 100% 被动的。)
最 "clean" AWS 解决方案是 CodeCommit -> CodePipeline -> CodeDeploy,或者 CodeCommit -> CodeDeploy,但这些服务现在还没有完全集成。
对于您的情况,目前最简单可行的解决方案是 Github -> CodeDeploy。任何与此不同的东西都需要一些中间步骤,比如我提供的示例(CodeShip、Jenkins 等)。
对于使用 IAM 角色启动的 EC2 实例,您甚至不必内置 SSH 密钥。 Git 可以从 EC2 实例元数据中获取 CodeCommit 凭证。使用最新的 AWS CLI 包和 ~/.gitconfig 中的以下行烘焙基于 Linux 的 AMI:
[credential]
helper = !aws --profile default codecommit credential-helper $@
UseHttpPath = true
启动附加了 IAM 角色的实例,然后您无需任何设置即可克隆您的 CodeCommit 存储库。
如果您想要 运行 git 基于标签跨 EC2 实例队列的命令,您可能需要查看 Capistrano and Capify-EC2。
更新:
如果您愿意使用 AWS OpsWorks 从 CodeCommit 进行部署,则可以使用 Capistrano recent blog article about how to do that. You can also use OpsWorks to run arbitrary commands 跨实例。
我正在使用 AWS CodeCommit,它似乎是 git 的精简版。
如果所有这些 EC2 实例都具有相同的角色标签,我该如何实现?
我不想做任何花哨的事情,我只想指定一个标签,单击一个按钮,所有带有该标签的 EC2 实例将用于 CodeCommit。我想在我的本地机器上执行此操作。
我知道我需要将 SSH 密钥放入我的每台 EC2 服务器中以访问 CodeCommit,并在每台服务器上安装 git(我会将其烘焙到 AMI 中)。我只是不确定如何 "trigger" 每台 EC2 机器进行 git 拉取?有AWS命令吗?
我不是开发人员,只知道基本的 linux 和 php。
最接近 AWS 托管服务的是 CodeDeploy。有了它,您可以通过命令行或 Web 控制台在 EC2 实例中编排部署。但是到目前为止,CodeDeploy 只是从 S3 或 GitHub 中提取工件。到目前为止,CodeCommit 似乎与其他相关的亚马逊服务完全隔离,例如 CodePipeline和CodeDeploy,所以好像不是一个好的选择。但是,当然,亚马逊的路线图是整合所有这些(不这样做是没有意义的)。所以,现在,你最好使用 GitHub 而不是 CodeCommit.
但是,考虑到您没有使用 GitHub,那么您需要一个 CI(持续集成) 存储库和 CodeDeploy 之间的解决方案,从源代码中提取代码,可能构建或 运行ning 测试,将其推送到 S3 和告诉 CodeDeploy 这件事。 CodeShip, for example, which can do that, and integrates with a lot of external services. Or you could even have your own CI server, like Jenkins 正在为您扮演 "glue" 的角色。 (Jenkins 可能是最灵活的,因为它是开源的并且可能有适用于所有内容的插件。)
所以,稍微分解一下,您的工作流程将是这样的:
- 将代码推送到您的存储库;
- 只要有事件发生(某个分支上的提交,或者新标签,它应该是可配置的),你的 CI 拉它,运行 无论你想要或需要什么(构建、测试、打包),并将其推送到 S3(通常作为 tarball 文件);
- 根据您的设置方式,您的 CI 告诉 Code Deploy 将其部署到您的 EC2 实例,或者它只是告诉它有一个可用的新版本,并允许您随时通过 Web 控制台上的 CLI 手动触发部署。
(实际上,CodeDeploy 不会将代码推送到 EC2 个实例。相反,每个 EC2 实例必须 运行 一个定期汇集 CodeDeploy 服务器的代理,以便知道是否有新的东西要在本地应用。无论如何,CodeDeploy 协调并从代理那里获得反馈,所以它的工作方式就好像它在 CodeDeploy 端是 100% 活跃的,在实例端是 100% 被动的。)
最 "clean" AWS 解决方案是 CodeCommit -> CodePipeline -> CodeDeploy,或者 CodeCommit -> CodeDeploy,但这些服务现在还没有完全集成。
对于您的情况,目前最简单可行的解决方案是 Github -> CodeDeploy。任何与此不同的东西都需要一些中间步骤,比如我提供的示例(CodeShip、Jenkins 等)。
对于使用 IAM 角色启动的 EC2 实例,您甚至不必内置 SSH 密钥。 Git 可以从 EC2 实例元数据中获取 CodeCommit 凭证。使用最新的 AWS CLI 包和 ~/.gitconfig 中的以下行烘焙基于 Linux 的 AMI:
[credential]
helper = !aws --profile default codecommit credential-helper $@
UseHttpPath = true
启动附加了 IAM 角色的实例,然后您无需任何设置即可克隆您的 CodeCommit 存储库。
如果您想要 运行 git 基于标签跨 EC2 实例队列的命令,您可能需要查看 Capistrano and Capify-EC2。
更新: 如果您愿意使用 AWS OpsWorks 从 CodeCommit 进行部署,则可以使用 Capistrano recent blog article about how to do that. You can also use OpsWorks to run arbitrary commands 跨实例。