文档首页> Terraform> 用户指南> 弹性伸缩 AS
更新时间:2023-12-22 GMT+08:00

弹性伸缩 AS

应用场景

弹性伸缩服务可根据用户的业务需求,通过策略自动调整其业务的资源。具有自动调整资源、节约成本开支、提高可用性和容错能力的优势。适用以下场景:

  • 访问流量较大的论坛网站,业务负载变化难以预测,需要根据实时监控到的云服务器CPU使用率、内存使用率等指标对云服务器数量进行动态调整。
  • 电商网站,在进行大型促销活动时,需要定时增加云服务器数量和带宽大小,以保证促销活动顺利进行。
  • 视频直播网站,每天14:00~16:00播出热门节目,每天都需要在该时段增加云服务器数量,增大带宽大小,保证业务的平稳运行。

操作步骤

  1. 创建伸缩配置。

    创建main.tf文件,输入以下内容,并保存在当前的执行目录中。
    data "huaweicloud_availability_zones" "myaz" {}
    
    data "huaweicloud_compute_flavors" "myflavor" {
      availability_zone = data.huaweicloud_availability_zones.myaz.names[0]
      performance_type  = "normal"
      cpu_core_count    = 2
      memory_size       = 4
    }
    
    data "huaweicloud_images_image" "myimage" {
      name        = "Ubuntu 18.04 server 64bit"
      most_recent = true
    }
    
    resource "huaweicloud_as_configuration" "my_as_config" {
      scaling_configuration_name = "my_as_config"
    
      instance_config {
        flavor   = data.huaweicloud_compute_flavors.myflavor.ids[0]
        image    = data.huaweicloud_images_image.myimage.id
        key_name = var.my_keypair
        disk {
          size        = 40
          volume_type = "SSD"
          disk_type   = "SYS"
        }
      }
    }

  2. 创建弹性伸缩组。

    在main.tf文件中增加以下内容。

    data "huaweicloud_vpc" "vpc_1" {
      name = var.vpc_name
    }
    
    data "huaweicloud_vpc_subnet" "subnet_1" {
      name   = var.subnet_name
      vpc_id = data.huaweicloud_vpc.vpc_1.id
    }
    
    data "huaweicloud_networking_secgroup" "secgroup_1" {
      name = var.secgroup_name
    }
    
    resource "huaweicloud_as_group" "my_as_group" {
      scaling_group_name       = "my_as_group"
      scaling_configuration_id = huaweicloud_as_configuration.my_as_config.id
      desire_instance_number   = 2
      min_instance_number      = 0
      max_instance_number      = 10
      vpc_id                   = data.huaweicloud_vpc.vpc_1.id
      delete_publicip          = true
      delete_instances         = "yes"
      networks {
        id = data.huaweicloud_vpc_subnet.subnet_1.id
      }
      security_groups {
        id = data.huaweicloud_networking_secgroup.secgroup_1.id
      }
      tags = {
        owner = "AutoScaling"
      }
    }

  3. 添加扩容策略。

    本教程使用告警策略,当平均CPU使用率>=80%时自动扩容一个ECS实例,在main.tf文件中增加以下内容。

    resource "huaweicloud_ces_alarmrule" "scaling_up_rule" {
      alarm_name = "scaling_up_rule"
      metric {
        namespace   = "SYS.AS"
        metric_name = "cpu_util"
        dimensions {
          name  = "AutoScalingGroup"
          value = huaweicloud_as_group.my_as_group.id
        }
      }
      condition {
        period              = 300
        filter              = "average"
        comparison_operator = ">="
        value               = 80
        unit                = "%"
        count               = 1
      }
      alarm_actions {
        type              = "autoscaling"
        notification_list = []
      }
    }
    resource "huaweicloud_as_policy" "scaling_up_policy" {
      scaling_policy_name = "scaling_up_policy"
      scaling_policy_type = "ALARM"
      scaling_group_id    = huaweicloud_as_group.my_as_group.id  
      alarm_id            = huaweicloud_ces_alarmrule.scaling_up_rule.id
      cool_down_time      = 300
      scaling_policy_action {
        operation       = "ADD"
        instance_number = 1
      }
    }

  4. 添加缩容策略。

    本教程使用告警策略,当平均CPU使用率<=20%时自动缩容一个ECS实例,在main.tf文件中增加以下内容。

    resource "huaweicloud_ces_alarmrule" "scaling_down_rule" {
      alarm_name = "scaling_down_rule"
      metric {
        namespace   = "SYS.AS"
        metric_name = "cpu_util"
        dimensions {
          name  = "AutoScalingGroup"
          value = huaweicloud_as_group.my_as_group.id
        }
      }
      condition {
        period              = 300
        filter              = "average"
        comparison_operator = "<="
        value               = 20
        unit                = "%"
        count               = 1
      }
      alarm_actions {
        type              = "autoscaling"
        notification_list = []
      }
    }
    resource "huaweicloud_as_policy" "scaling_down_policy" {
      scaling_policy_name = "scaling_down_policy"
      scaling_policy_type = "ALARM"
      scaling_group_id    = huaweicloud_as_group.my_as_group.id  
      alarm_id            = huaweicloud_ces_alarmrule.scaling_down_rule.id
      cool_down_time      = 300
      scaling_policy_action {
        operation       = "REMOVE"
        instance_number = 1
      }
    }

  5. 配置变量。

    创建variables.tf文件,输入以下内容,并保存在当前的执行目录中。您可以根据实际情况修改变量值。

    variable "my_keypair" {
      default = "default"
    }
    variable "vpc_name" {
      default = "vpc-default"
    }
    variable "subnet_name" {
      default = "subnet-default"
    }
    variable "secgroup_name" {
      default = "default"
    }

  6. 创建资源。

    1. 运行 terraform init 初始化环境。
    2. 运行 terraform plan 查看资源。
    3. 确认资源无误后,运行 terraform apply 开始创建。
    4. 运行 terraform show 查看已创建的资源。