如何在多个实例Amazon EC2 Autocaling组上部署代码?

时间:2019-01-16 13:32:07

标签: amazon-web-services amazon-ec2 autoscaling

因此,我们正在建立一个基于magento的电子商务商店。我们希望使用RDS作为数据库服务,并在需要时使用Amazon自动缩放和弹性负载平衡器来将其部署在Amazon EC2实例上。

我不明白的是: 我已在EC2实例(数据库位于RDS中)上安装并配置了生产magento环境。这样很好。但是现在当我想动态扩展实例数量

  • 如何将代码每次部署在动态生成的实例上?
  • aws将复制整个实例,为其分配一个新的IP,并将其生成为 新实例,否则我将不得不编写一些代码来自动执行此操作 过程吗?
  • 加上每次生成新实例时从git中提取代码并进行部署都不会产生开销吗?

对于该主题的一些资源的详细解释或方向,将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以在AutoScalingGroup启动配置中执行此操作。 CloudFormation中的LaunchConfiguration中有一个UserData部分,您可以在其中编写一个脚本,该脚本在ASG扩大规模并部署新实例时运行。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html#cfn-as-launchconfig-userdata

这与EC2实例中的UserData部分相同。您可以使用LifeCycle挂钩,该挂钩将告诉ASG在您要配置的所有内容都设置好之前不要将EC2实例加载。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-as-lifecyclehook.html

我链接了所有CloudFormation页面,但是您可能会使用其他CI / CD工具来部署基础架构,但是希望可以帮助您入门。

答案 1 :(得分:2)

要开始,请检查AWS CloudFormation。您将创建模板来设计应用程序的基础结构的工作方式〜基础结构作为代码。有了这些模板后,您可以通过推送对模板和/或应用程序代码的更改来向基础结构发布更新。

在我当前的项目中,我们有一个专用于这些基础结构模板的github存储库,以及一个用于我们的应用程序代码的单独存储库。创建一个用于创建AWS资源的管道,该管道将在您每次推送到特定分支上的存储库时将更新发布到AWS。

  • 创建基础架构管道
  • 在基础架构模板的代码发生更改时,您就有了流水线的第一阶段来触发构建。请参见AWS CodePipeline,也请参见AWS CodeBuild。这些不是您唯一需要的AWS资源,但它们可能是主要的资源,当然,除了如前所述在cloudformation模板中完成的工作之外。
  

每次如何将代码部署在动态生成的实例上?

  • 检查containers的工作方式,这样会更好,并且会大大补充您对启动新版本的应用程序的工作方式的学习。首先,请参见docker,但请随时检查可用的资源
  • 继续我当前的项目:我们确实有一个专用于我们应用程序的单独管道,但是也会在我们的基础结构管道更新后触发。我们的应用程序管道旨在通过AWS Codebuild来构建应用程序的新版本,这将创建一个image,它将成为docker文档中的一个容器。
  • 我们有两个触发器或两个源,它们将触发对应用程序管道的更新部署,一个是对基础架构管道的更改,并且成功构建,第二个是通过AWS CodeBuild连接的github存储库上的代码更改。
  • 检查AWS AutoScaling,该区域涵盖了新实例的动态启动,在需要时关闭实例,在需要时替换不正常实例的功能。另请参见AWS CloudWatch,您可以使用它来设计条件以触发放大/缩小和/或放大/缩小。
  

aws会复制整个实例,为它分配一个新的IP并将其作为新实例生成,还是我必须编写一些代码来自动化该过程?

  • 请参阅AWS ElasticLoadBalancing,并进一步了解AWS AutoScaling。在自动化过程中,如果您将继续使用CloudFormation,实例和/或容器(取决于您的设计)将得到优雅的管理。
  

加上每次生成新实例时从git中提取代码并进行部署都不会产生开销吗?

  • 如前所述,之前有一个用于通过CodeBuild推出应用程序新版本的管道,这将创建一个具有新代码更改的映像,当一切准备就绪时,它将被部署为一个容器。在新版本的应用程序启动并运行之后,旧的EC2实例或旧的容器(取决于您希望如何部署应用程序)将正常关闭。这将使您的停机时间为零。