【问题标题】:how to deploy code on multiple instances Amazon EC2 Autocaling group?如何在多个实例 Amazon EC2 Auto Scaling 组上部署代码?
【发布时间】:2019-06-10 14:33:12
【问题描述】:

因此,我们正在推出一个基于 magento 的电子商务商店。我们希望将其部署在 Amazon EC2 实例上,使用 RDS 作为数据库服务,并在需要时使用亚马逊自动扩展和弹性负载均衡器来扩展应用程序。

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

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

非常感谢您对有关该主题的一些资源的详细解释或方向。

【问题讨论】:

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


    【解决方案1】:

    您在 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 工具来部署您的基础架构,但希望这可以帮助您入门。

    【讨论】:

      【解决方案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 实例或旧容器(取决于您希望如何部署应用程序)将正常关闭。这将使您的停机时间为零。

      【讨论】:

        猜你喜欢
        • 2014-01-28
        • 2022-01-22
        • 2011-11-24
        • 1970-01-01
        • 2021-08-25
        • 2018-11-18
        • 2014-06-08
        • 2021-02-09
        • 2019-07-10
        相关资源
        最近更新 更多