คุณสามารถทำสิ่งนี้ให้สำเร็จได้ด้วย Terraform มีสองสามวิธีในการบรรลุเป้าหมายนี้ แต่ฉันจะเน้นวิธีที่ทำให้คุณมีความยืดหยุ่นมากขึ้น
สมมติว่าคุณมีของคุณแล้ว aws_autoscaling_group กำหนดทรัพยากรแล้ว หลังจากนั้นคุณต้องกำหนดนโยบายการปรับสเกลสำหรับ ASG และ CloudWatch สัญญาณเตือนภัยที่จะเรียกพวกเขา
ฉันมักจะติดตามตัวชี้วัดที่แตกต่างกัน 3 รายการสำหรับการปรับขนาดอัตโนมัติ: MemoryReservation, CPUReservation และ CPUUtilization
ตัวอย่างวิธีการตั้งค่าการปรับขนาดอัตโนมัติตาม CPUUtilization
นโยบายการปรับขนาดสำหรับ ASG ของเรา:
ทรัพยากร "aws_autoscaling_policy" "my-cpu-scal-up" {
  ชื่อ = "my-cpu-scal-up"
  scaling_adjustment = 1
  adjustment_type = "ความสามารถในการเปลี่ยนแปลง"
  คูลดาวน์ = 60
  autoscaling_group_name = aws_autoscaling_group.[your-asg-resource].name
}
ทรัพยากร "aws_autoscaling_policy" "my-cpu-scale-down" {
  ชื่อ = "my-cpu-scal-down"
  scaling_adjustment = -1
  adjustment_type = "ความสามารถในการเปลี่ยนแปลง"
  คูลดาวน์ = 300
  autoscaling_group_name = aws_autoscaling_group.[your-asg-resource].name
}
การแจ้งเตือนของ CloudWatch ที่จะเรียกใช้หนึ่งในนโยบายของเรา
ทรัพยากร "aws_cloudwatch_metric_alarm" "my-cpu-usage-high" {
  alarm_name = "my-cpu-การใช้งานสูง"
  Comparison_operator = "มากกว่าหรือเทียบเท่ากับเกณฑ์"
  evaluation_periods = "2"
  metric_name = "การใช้งานซีพียู"
  เนมสเปซ = "AWS/EC2"
  ระยะเวลา = "60" // วินาที
  สถิติ = "ค่าเฉลี่ย"
  เกณฑ์ = "70" // ใน %
  alarm_description = "เมตริกนี้ตรวจสอบคลัสเตอร์สำหรับการใช้งาน CPU สูง"
  alarm_actions = [
    aws_autoscaling_policy.my-cpu-scale-up.arn
  ]
  ขนาด ={
    AutoScalingGroupName= aws_autoscaling_group.[your-asg-resource].name
  }
}
ทรัพยากร "aws_cloudwatch_metric_alarm" "my-cpu-usage-low" {
  alarm_name = "my-cpu-use-low"
  Comparison_operator = "LessThanOrEqualToThreshold"
  evaluation_periods = "2"
  metric_name = "การใช้งานซีพียู"
  เนมสเปซ = "AWS/EC2"
  ระยะเวลา = "60"
  สถิติ = "ค่าเฉลี่ย"
  เกณฑ์ = "20"
  alarm_description = "เมตริกนี้ตรวจสอบคลัสเตอร์ของฉันสำหรับการใช้งาน CPU ต่ำ"
  alarm_actions = [
    aws_autoscaling_policy.my-cpu-scale-down.arn
  ]
  ขนาด ={
    AutoScalingGroupName= aws_autoscaling_group.[your-asg-resource].name
  }
}
ดังที่คุณเห็นจากตัวอย่างนี้ เราสามารถเล่นกับการกำหนดค่าการเตือนภัยได้จนกว่าเราจะได้ผลลัพธ์ที่ต้องการ
หวังว่าจะช่วยได้!