你是否厌倦了监控 AWS 实例的负载以及其接收的流量?为什么不通过部署 Terraform 自动伸缩组 来自动化一切呢?自动伸缩允许一些服务器在负载低的时候休眠,并在负载高的时候添加更多服务器,从而节省公司的电费。
在本教程中,您将学习如何构建和运行 Terraform 配置来构建自动伸缩组,并使用 Terraform 部署它们。
继续阅读,并在您的实例上实现零停机时间!
先决条件
本文将是一个逐步教程。如果您想跟着做,请确保您已经准备好了以下内容:
- 一个 Amazon Web 服务 (AWS) 账户。
- A code editor – Even though you can use any text editor to work with Terraform configuration files, consider using Visual Studio (VS) Code as it understands the HCL Terraform language well.
- Terraform – 本教程使用 Terraform v1.1.5 在 Ubuntu 20.04 LTS 上运行,但任何带有 Terraform 的操作系统都应该可以工作。
构建 AWS 自动伸缩组的 Terraform 配置
在运行 Terraform 命令来构建和部署基础架构之前,您必须创建 Terraform 配置文件。您将构建一个 Terraform 配置以在您的 AWS 帐户中创建一个 AWS Autoscaling 组。
1. 使用您喜欢的 SSH 客户端登录到您的计算机。
2. 接下来,创建一个名为 ~/terraform-autoscaling-demo 的文件夹,然后将工作目录更改 (cd
) 到该文件夹。该文件夹将包含您在本教程中将要使用的所有配置文件。
3. 打开您喜欢的代码编辑器,复制/粘贴以下配置,并将文件保存为 main.tf 在 ~/terraform-autoscaling-demo 目录中。这个 main.tf 文件是 Autoscaling 组的 Terraform 配置。
下面的代码创建一个 autoscaling launch configuration (web_config
) 并提供一个 Autoscaling 组 (autoscalegroup
)。Autoscaling 组还附带其组件 (aws_autoscaling_schedule
和 aws_autoscaling_policy
)。
4. 在~/terraform-autoscaling-demo目录下创建另一个名为provider.tf的文件,并填入以下内容。 provider.tf文件定义了诸如AWS、Oracle、Azure等提供商。该配置文件允许您将Terraform与正确的云服务连接起来。
5. 最后,运行下面的tree
命令,以验证项目文件夹(~/terraform-autoscaling-demo
)中是否存在所有必需文件。

使用Terraform配置创建AWS Autoscaling组
现在您已经正确设置了Terraform配置文件和变量文件,是时候启动Terraform并创建AWS Autoscaling组了。
为了配置AWS Autoscaling组,与所有其他Terraform配置一样,Terraform使用三个连续的命令(terraform init
,terraform plan
和terraform apply
)。
1. 在 ~/terraform-autoscaling-demo 目录中运行 terraform init
命令。该命令会初始化所需的插件和提供者,以便与资源一起使用。
如果一切顺利,您将在输出中看到 Terraform 初始化成功的消息,如下所示。

2. 接下来,运行 terraform plan
命令,以确保配置文件的语法正确,并为将在基础架构中预配的资源提供蓝图。
如果成功,您应该会看到一个显示计划的消息,如下所示。

3. 最后,运行 terraform apply
命令,去掉训练轮并调用 Terraform 创建 AWS AutoScaling 组。
该命令告诉 Terraform 读取当前目录中的每个配置文件 (*.tf),编译发送到 AWS 的状态。然后,Terraform 构建 AWS Autoscaling 组和其他组件。
AWS Auto Scaling 不会产生额外费用。您只需支付运行应用程序所需的 AWS 资源。

在 AWS 云中验证 AWS Autoscaling 组
到目前为止,您应该已经使用 Terraform 创建了 AWS Autoscaling 组和相关组件。但是,您如何知道它们存在于您的 AWS 云中?通过在 AWS 管理控制台中手动检查来验证 Autoscaling 组。
1. 打开您喜欢的 Web 浏览器,然后登录到 AWS 管理控制台。
2. 在控制台的主页上,点击搜索框,搜索并点击“EC2”以访问 EC2 仪表板。
点击 EC2 仪表板中的AWS 自动扩展组菜单项以管理您的自动扩展组。
在 EC2 仪表板上,您可以使用下面的自动缩放功能启动所需数量的 AWS EC2 实例。

3. 最后,在 EC2 仪表板中点击 AWS 自动扩展启动配置。您将会看到您的自动扩展启动配置(web_config)如下所示。

使用负载测试对 EC2 实例进行自动缩放
现在,您已经验证了自动扩展组/策略和相关组件已正确设置,是时候测试自动缩放功能是否正常工作了。如何测试?通过在最近使用自动缩放组启动的实例上增加负载。
1. 使用 SSH 客户端打开使用自动扩展组启动的 AWS EC2 实例。
2. 接下来,启动终端,并运行下面的命令来安装
负载压力工具(stress-ng
)。这个压力工具允许您定义和生成对 Ubuntu 机器的压力。
您也可以找到市场上其他的负载压力工具。

3. 运行下面的stress-ng
命令来在实例上生成压力负载。
以下命令包含以下标志:
--cpu
– 表示将在其上生成负载的核心数。
-v
– 启用详细模式。
--timeout
– 指定生成负载的时间。

4. 立即运行以下top
命令,显示生成负载后的Linux进程。
如下所示,您会看到在生成负载到实例后,CPU会出现波动。

5. 转到AWS云上的AWS CloudWatch服务。您会注意到当CPU超过(10%)时,会生成一个警报。该警报通知了自动缩放组,根据自动缩放组中指定的配置,将实例数量从一个扩展到两个。

6. 最后,跳转到您在EC2仪表板中的实例,以验证AWS EC2实例。
您会看到启动了一个额外的实例,这证实了AWS自动缩放组及其组件的成功设置。

您还可以在AWS自动缩放组活动中验证自动缩放活动,如下所示。

结论
在本教程中,您已经学会了如何使用Terraform部署AWS自动缩放组及其组件。使用AWS自动缩放组构建自动缩放应用程序,使您能够在需要时进行扩展,是一项快速的任务。
现在,有了这些新发现的知识,可以放手实现与其他AWS服务的自动扩展,而不必担心服务器的负载!
Source:
https://adamtheautomator.com/terraform-autoscaling-group/