在Terraform中为价格配置AWS自动扩展组?

时间:2019-12-02 14:11:43

标签: amazon-web-services terraform autoscaling

我创建了一个AMI,当使用systemd启动计算机时,该AMI会执行工作。由于工作不是时间紧迫的,因此我想使用AWS自动缩放组来优化成本。我正在使用Terraform来管理我的基础架构。

这是我到目前为止所拥有的:

# ...

resource "aws_launch_template" "default" {
  name = "autoscaling-launch-template"

  capacity_reservation_specification {
    capacity_reservation_preference = "open"
  }

  credit_specification {
    cpu_credits = "standard"
  }

  iam_instance_profile {
    name = aws_iam_instance_profile.default.name
  }

  image_id = data.aws_ami.default.id

  instance_market_options {
    market_type = "spot"
  }

  instance_type = "t2.small"
  key_name      = var.master_key

  monitoring {
    enabled = true
  }

  placement {
    availability_zone = "us-east-1a"
  }

  vpc_security_group_ids = [ "${aws_security_group.default.id}" ]

  tag_specifications {
    resource_type = "instance"
  }

  user_data = base64encode(local.user_data)
}

resource "aws_autoscaling_group" "default" {
  name                 = "my-autoscaling-group"
  min_size             = 1
  max_size             = 5
  desired_capacity     = 2
  availability_zones   = [ "us-east-1a" ]

  launch_template {
    id      = aws_launch_template.default.id
    version = "$Latest"
  }

  lifecycle {
    create_before_destroy = true
  }
}

# ...

我想实现以下目标:

  • 现货价格低时,扩展到最大
  • 现货实例价格较高时,请缩小到最小值

“高”和“低”价格应大致使用滚动平均值或类似方法定义。我不想维持最低和最高价格。

我一直想使用t2.small

如何在Terraform中实现这一目标?

1 个答案:

答案 0 :(得分:0)

terraform注册表具有一个不错的经过验证的模块,用于创建自动缩放组:

https://registry.terraform.io/modules/terraform-aws-modules/autoscaling/aws/3.4.0

您可以使用spot_price变量将竞价型实例启动到ASG中。