AWS EC2 自动扩展理念

Posted

技术标签:

【中文标题】AWS EC2 自动扩展理念【英文标题】:AWS EC2 Auto scaling philosophy 【发布时间】:2022-01-23 19:29:56 【问题描述】:

你好!

我刚开始对 AWS 进行调查,但其中一个概念对我来说似乎不清楚。基于此,我想寻求帮助以了解功能。

我在 EC2 上安装了一个基于 php 的 Web 应用程序。 我的应用程序负载很大,我需要使用负载均衡器以获得最佳性能。如何执行和设置这一点很清楚。我的应用程序代码托管在 Gitlab 上。

在 EC2 和负载均衡器设置之后,我是否想使用自动缩放。 所以,我需要使用自动缩放组。

主要问题:接下来我应该做什么?据我了解,我需要以某种方式创建一个新实例,但我需要具有所有依赖项和源代码的实例的正确图像。 代码自动部署也是一个大问题。当新功能合并时,我需要运行 GitLab 管道并以某种方式将代码交付到新的 EC2。

那么,我需要阅读和调查哪些内容才能自动将新代码部署到新的 EC2 实例? AWS 是否为此提供了一些工具?

感谢您对我的旅程的帮助。

问候, 梅维斯。

【问题讨论】:

如果您是云新手,最好选择像 ECS fargate 这样的托管服务,而不是直接使用 ec2 实例。你的问题是一个有点宽泛的话题。 在 Auto Scaling 组中启动新实例的最快方法是创建一个包含所有预加载软件的 AMI。这样,它可以在启动后立即开始使用。或者,您可以编写一个在新实例首次启动时运行的用户数据脚本,该脚本可以配置该实例。如果配置需要很长时间,您可以使用Amazon EC2 Auto Scaling lifecycle hooks - Amazon EC2 Auto Scaling 来表示它何时准备好接受流量。 【参考方案1】:

您可以从这个链接https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-from-instance.html 开始,它向您解释了如何基于 EC2 实例创建自动扩展组。

简而言之,您可以从当前的 EC2(主机 php)生成一个 AMI(亚马逊机器映像),并为您的自动扩展组创建一个启动配置/启动模板。

接下来,您可以添加一个负载均衡器来将流量分配给这些实例,您可以将其与目标组和您的 Autoscaling 组 https://docs.aws.amazon.com/autoscaling/ec2/userguide/attach-load-balancer-asg.html 相关联

对于自动部署,您可以在管道中自动化以创建新的启动配置或从 S3 或 用户数据部分中的其他位置获取代码 PHP 的最新版本。您可以使用 gitlab ci 或 CodeDeploy,这是这类东西的完美候选者

还要注意,自动缩放组是无状态的(创建/终止实例),您必须将图像和资产存储在共享位置如 S3、DB 或 EFS,因为如果实例是不健康或被 ASG 终止,您可能会丢失数据。

【讨论】:

以上是关于AWS EC2 自动扩展理念的主要内容,如果未能解决你的问题,请参考以下文章

AWS OpsWorks 基于负载的实例(如 EC2 自动扩展)

AWS IAM 策略拒绝对自动扩展组或 ECS 集群内的任何 EC2 实例的权限

AWS 中的弹性 IP 和自动扩展

AWS 自动扩展组 AMI

Laravel AWS EBS 自动扩展

如何在晚上自动缩减 AWS EC2 实例(停止并更改为 t2.small)并在早上自动扩展(停止并转到 t2.large)?