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

Posted

技术标签:

【中文标题】在 Terraform 中为价格配置 AWS 自动扩展组?【英文标题】:Configure an AWS auto-scaling group for price in Terraform? 【发布时间】:2020-03-27 04:04:00 【问题描述】:

我创建了一个 AMI,它在使用 systemd 启动机器时执行工作。由于这项工作对时间要求不高,我想使用 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】:

terraform 注册表有一个很好的验证模块,用于创建自动缩放组:

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

您可以使用 spot_price 变量将 Spot 实例启动到 ASG。

【讨论】:

以上是关于在 Terraform 中为价格配置 AWS 自动扩展组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Terraform 配置 AWS EKS 自动扩缩器?

在另一个模块中为 EC2 添加指定子网 - AWS Terraform -

部署期间的 aws terraform 种子云配置文件

AWS ElasticBeanstalk Terraform DisableIMDSv1 未知配置设置

AWS ElasticBeanstalk EC2 终止保护

使用 Terraform 在 AWS 上创建 HA NAT