學習如何快速部署 Terraform 自動縮放組

你是否厭倦了監控 AWS 實例的負載和流量?為什麼不通過部署 Terraform 自動擴展組來自動化一切呢?自動擴展允許一些伺服器在低負載時休眠,並在高負載時添加更多伺服器,為公司節省電費。

在本教程中,您將學習如何構建和運行 Terraform 配置以構建自動擴展組並使用 Terraform 部署它們。

繼續閱讀,實現實例的零停機!

先決條件

本帖將是一個逐步教程。如果您想跟著進行,請確保您已經準備好以下內容:

  • 一個 Amazon Web Service (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 – 本教程使用在 Ubuntu 20.04 LTS 上運行的 Terraform v1.1.5,但任何帶有 Terraform 的操作系統都應該可以工作。

構建 AWS 自動擴展組的 Terraform 配置

在运行Terraform命令以构建和部署基础设施之前,您必须创建Terraform配置文件。您将构建一个Terraform配置,以在您的AWS账户中创建一个AWS自动扩展组。

1. 使用您喜欢的SSH客户端登录到您的机器。

2. 接下来,创建一个名为~/terraform-autoscaling-demo的文件夹,然后将工作目录更改为该文件夹(使用cd命令)。该文件夹将包含本教程中要处理的所有配置文件。

mkdir ~/terraform-autoscaling-demo
cd ~/terraform-autoscaling-demo

3. 打开您喜欢的代码编辑器,复制/粘贴以下配置,并将文件保存为main.tf,保存到~/terraform-autoscaling-demo目录中。这个main.tf文件是自动扩展组的Terraform配置。

下面的代码创建一个自动扩展启动配置web_config),并配置一个自动扩展组(autoscalegroup)。自动扩展组还带有其组件(aws_autoscaling_scheduleaws_autoscaling_policy)。

# 創建包含 AWS EC2 實例詳細信息的自動調整啟動配置
resource "aws_launch_configuration" "aws_autoscale_conf" {
# 定義 Autoscaling 啟動配置的名稱
  name          = "web_config"
# 定義 AWS EC2 實例的映像 ID
  image_id      = "ami-04505e74c0741db8d"
# 定義 AWS EC2 實例的實例類型
  instance_type = "t2.micro"
# 定義用於訪問 AWS EC2 實例的金鑰
  key_name = "automateinfra"
}

# 在 us-east-1a 可用區內創建自動調整組
resource "aws_autoscaling_group" "mygroup" {
# 定義 AWS EC2 實例將啟動的可用區
  availability_zones        = ["us-east-1a"]
# 指定自動調整組的名稱
  name                      = "autoscalegroup"
# 定義在縮放時的最大 AWS EC2 實例數量
  max_size                  = 2
# 定義在縮放時的最小 AWS EC2 實例數量
  min_size                  = 1
# 優容期是 AWS EC2 實例投入運行並在檢查健康狀況之前的時間
  health_check_grace_period = 30
# 自動調整將根據在 AWS CLoudwatch Alarm 中定義的 AWS EC2 實例的健康狀況進行
  health_check_type         = "EC2"
# force_delete 立即刪除自動縮放組,而不必等待所有實例終止
  force_delete              = true
# 定義終止策略,最老的實例將首先被替換
  termination_policies      = ["OldestInstance"]
# 自動縮放啟動配置因 AWS EC2 實例配置而依賴於縮放組
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
# 創建自動調整組的自動調整計畫

resource "aws_autoscaling_schedule" "mygroup_schedule" {
  scheduled_action_name  = "autoscalegroup_action"
# 自動縮放組的最小大小
  min_size               = 1
# 自動縮放組的最大大小
  max_size               = 2
# Desired_capacity 是自動縮放組中運行的 EC2 實例數量
  desired_capacity       = 1
# 如果您認為流量可能在此時達到峰值,請定義自動縮放的 start_time
  start_time             = "2022-02-09T18:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}

# 創建自動調整組的自動調整策略
resource "aws_autoscaling_policy" "mygroup_policy" {
  name                   = "autoscalegroup_policy"
# 按縮放的實例數量
  scaling_adjustment     = 2
  adjustment_type        = "ChangeInCapacity"
# 縮放完成後多久(秒)開始下一次縮放
  cooldown               = 300
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}
# 創建 AWS CLoudwatch Alarm,根據 CPU 利用率自動調整 AWS EC2 實例
resource "aws_cloudwatch_metric_alarm" "web_cpu_alarm_up" {
# 定義 AWS cloudwatch alarm 的名稱
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# 根據哪個指標進行縮放(基於 CPU)
  metric_name = "CPUUtilization"
# 警報相關指標的命名空間
  namespace = "AWS/EC2"
# 在 AWS Cloudwatch Alarm 觸發後,它將等待 60 秒,然後自動調整
  period = "60"
  statistic = "Average"
# CPU 利用率閾值設置為 10%
  threshold = "10"
  alarm_actions = [
        "${aws_autoscaling_policy.mygroup_policy.arn}"
    ]
dimensions = {
    AutoScalingGroupName = "${aws_autoscaling_group.mygroup.name}"
  }
}

4. 在 ~/terraform-autoscaling-demo 建立另一個名為 provider.tf 的檔案,並填入以下內容。 provider.tf 檔案定義了像 AWS、Oracle、Azure 等提供者。 此配置文件可讓您將 Terraform 連接到正確的雲服務。

本教程將在 us-east-1 區域中創建資源。 但您可以找到 AWS 支援的區域列表

provider "aws" {
   region = "us-east-1"
 }

5. 最後,執行下面的 tree 命令,以驗證您的項目文件夾中是否存在所有所需的檔案(~/terraform-autoscaling-demo)。

Verifying the Required Files for Building AWS Autoscaling Group in AWS Cloud

使用 Terraform 配置創建 AWS Autoscaling 群組

現在您已正確設置 Terraform 配置文件和變數檔案,是時候啟動 Terraform 並創建 AWS Autoscaling 群組了。

要配置 AWS Autoscaling 群組,與所有其他 Terraform 配置一樣,Terraform 使用三個命令來進行序列操作(terraform initterraform planterraform apply)。

1. 在 ~/terraform-autoscaling-demo 目錄中執行 terraform init 命令。該命令會初始化所需的插件和提供者,以便與資源一起使用。

terraform init

如果一切順利,您將在輸出中看到 Terraform 已成功初始化的訊息,如下所示。

Initializing Terraform

2. 接下來,執行 terraform plan 命令,以確保您的配置文件語法正確,並提供將在基礎設施中配置的資源的藍圖。

terraform plan

如果成功,您應該會看到顯示計畫的訊息,如下所示。

Executing the Terraform Plan

3. 最後,執行 terraform apply 命令,以移除訓練輪並調用 Terraform 來創建 AWS 自動縮放群組。

該命令告訴 Terraform 讀取當前目錄中的每個配置 (*.tf),以編譯發送到 AWS 的狀態。然後,Terraform 構建 AWS 自動縮放群組和其他組件。

使用 AWS 自動縮放不會產生額外費用。您僅支付運行應用程序所需的 AWS 資源。

Applying the Terraform Configuration to Build Autoscaling Group

在 AWS 云中驗證 AWS 自動縮放群組

到目前為止,您應該已使用 Terraform 創建了 AWS 自動縮放群組和相關組件。但是,您如何知道它們存在於您的 AWS 云中呢?通過在 AWS 管理控制台中手動檢查來驗證自動縮放群組。

1. 打開您喜歡的網絡瀏覽器,並登錄到 AWS 管理控制台

2. 在控制台主页上,点击搜索框,搜索并点击“EC2”以访问EC2仪表板。

在EC2仪表板中点击AWS自动伸缩组菜单项以管理您的自动伸缩组。

在EC2仪表板上,使用以下自动缩放配置启动AWS EC2实例的期望数量。

Verifying the AWS Autoscaling Group with Scaling Policy Containing AWS CloudWatch Alarm

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

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

通过负载测试对EC2实例进行自动伸缩

现在您已经验证了自动伸缩组/策略和相关组件的设置是否正确,是时候测试自动伸缩功能是否正常工作了。如何?通过在最近使用自动伸缩组启动的实例上增加负载。

1. 使用SSH客户端打开使用自动伸缩组启动的AWS EC2实例。

2. 接下来,打开终端,并运行以下命令安装 负载压力工具stress-ng)。这个压力工具允许您定义和生成Ubuntu机器上的压力。

您也可以找到其他负载压力工具在市场上。

sudo apt install stress-ng
Installing the Load Stress tool on the AWS EC2 instance

3. 运行下面的stress-ng命令在实例上生成负载压力。

以下命令包含以下標誌:

  • --cpu – 表示將生成負載的核心數。
  • -v – 啟用詳細模式。
  • --timeout – 指定生成負載的時間。
sudo stress-ng --cpu 4 -v --timeout 3000s
Generating the load on AWS EC2 instance.

4. 現在立即運行以下命令:top,以顯示 Linux 進程。

top

如下所示,在生成負載後 CPU 震盪。

Executing the top command to verify the CPU consumption

5. 轉到 AWS 云監視服務。您會注意到當 CPU 超過 (10%) 時,會生成一個警報。警報通知自動縮放組將實例數從一個增加到兩個,如自動縮放組中指定的那樣。

Viewing the Alarm Generated in the AWS CloudWatch Service

6. 最後,轉到您在 EC2 儀表板中的 實例,以驗證 AWS EC2 實例。

您會看到已啟動一個更多的實例,這證實了成功設置 AWS 自動縮放組和組件。

Verifying the AWS EC2 instances in the EC2 dashboard

您還可以在 AWS 自動縮放組活動中驗證自動縮放活動,如下所示。

Verifying the AWS AutoScale group activities

結論

通過本教程,您已經學會了如何使用 Terraform 部署 AWS 自動縮放組及其組件。使用 AWS 自動縮放組構建自動縮放應用程序,可以在需要時進行擴展,並且是一個快速的任務。

現在,有了這些新知識,可以放手實施與其他AWS服務的自動縮放,而不必擔心伺服器的負載!

Source:
https://adamtheautomator.com/terraform-autoscaling-group/