如何使用 CodeDeploy 在新的 EC2 实例上部署现有应用程序

Posted

技术标签:

【中文标题】如何使用 CodeDeploy 在新的 EC2 实例上部署现有应用程序【英文标题】:How to deploy existing app with CodeDeploy on a new EC2 instance 【发布时间】:2015-02-24 12:37:44 【问题描述】:

当新的应用程序版本发布时,我使用 CodeShip 将我的应用程序部署到 AWS EC2 实例。 CodeShip 首先将我的应用程序打包成 .zip 并放入 S3。 每个部署包都使用不同的文件名生成。 当我使用 CodeShip 进行部署时,他们会在 CodeDeploy 中创建一个新修订版并将其部署到所有当前实例。

在一个方向上,每次我部署新版本时,它都会部署到我所有已经启动的实例,但是我如何将我的应用程序的 最新 修订版从 CodeDeploy 部署到新生成的实例? 有没有办法使用 aws-sdk(Ruby 或 cli)来实现这一点?

我使用 OpsWorks 来维护我的实例,并使用自定义 Chef 食谱来构建环境。

谢谢

【问题讨论】:

为每个函数/层创建不同的标签名称,因此当应用更改时,将应用到具有该标签的所有实例,无论它是否是新创建的。 【参考方案1】:

由于您有一组 EC2 实例希望运行相同的应用程序,因此请考虑使用 AutoScaling Group (ASG)。然后,基于 ASG(不是 EC2 实例标签)创建部署组。下次在此 ASG 中启动任何新机器时,Code Deploy 将自动运行并部署最后一次成功的部署包。我已经使用这个方法好几个月了,效果很好。

【讨论】:

【参考方案2】:

来自 CodeDeploy http://aws.amazon.com/codedeploy/faqs/ ,如果您转到概念部分并查看问题“什么是部署组”,在答案中您将更了解部署组的工作原理。

CodeDeploy 在创建新部署时使用部署组中的标签来查找 EC2 实例。所以对于新生的实例,基本上你只需要在那个部署组中用相同的标签来标记它们,然后用你想要的版本启动一个新的部署。 CodeDeploy 将在部署组中找到所有带有标签的 EC2 实例。

但是您应该注意到这一点,如果您想手动启动一个新的 EC2 实例,您需要做几件事。您可以按照此处的步骤:http://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-prepare-instances.html 启动与 CodeDeploy 一起使用的实例。

在实例被标记并正确设置后,您可以按照当前的方式启动具有最新版本的新部署。修订版应由 CodeDeploy 自动部署到新实例。

【讨论】:

谢谢。每次生成新实例时部署修订版是一个很大的开销,因为它会将代码部署到 所有 标记成员。

以上是关于如何使用 CodeDeploy 在新的 EC2 实例上部署现有应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在每个带有 codedeploy 的代码中更改 AMI 以实现自动缩放?

如何设置AWS CodeDeploy和EC2 CodeDeploy安全环境

CodeDeploy 未部署到新的自动缩放实例

如何使用 AWS CodeDeploy/CodePipeline/S3 将 Gitlab-Ci 部署到 EC2

通过用户数据在 EC2 实例上安装 CodeDeploy 代理

Codedeploy 无法在新扩展的 VM 上运行