通过自动缩放组中的 count.index 引用启动配置

Posted

技术标签:

【中文标题】通过自动缩放组中的 count.index 引用启动配置【英文标题】:reference launch config by count.index in an autoscale group 【发布时间】:2019-02-27 12:49:11 【问题描述】:

我正在通过 terraform on aws 创建一个主机集群,并尝试利用 count 来避免创建 3 个单独的 luanch 配置和自动缩放组。我没有成功使用 count.index 引用单个启动配置的自动缩放组部分。

这就是我认为的工作方式

resource "aws_launch_configuration" "cluster-lc" 
  count                       = 3
  associate_public_ip_address = true
  image_id                    = "$data.aws_ami.ami.id"
  instance_type               = "$var.instance-type"
  security_groups             = ["$aws_security_group.sg.id"]
  key_name                    = "kp"
  user_data                   = "$data.template_file.user_data.rendered"
  lifecycle 
    create_before_destroy = true
  


resource "aws_autoscaling_group" "asg" 
  count                = 3
  desired_capacity     = 1
  launch_configuration = "$aws_launch_configuration.cluster-lc[count.index].name"
  max_size             = 1
  min_size             = 1
  name                 = "asg-$count.index"
  vpc_zone_identifier  = ["$var.subnets.[count.index]"]

在尝试上述类似变体时,我收到以下错误。

Error: Error loading /test.tf: Error reading config for aws_autoscaling_group[asg]: parse error at 1:47: expected "" but found "."

"$aws_launch_configuration.cluster-lc.[count.index].name" "$aws_launch_configuration.cluster-lc.[count.index]name"

如果我尝试“$aws_launch_configuration.cluster-lc.name.[count.index]”,我会收到以下错误。

Error: Error running plan: 1 error(s) occurred:

* aws_autoscaling_group.zoo-asg: 3 error(s) occurred:

* aws_autoscaling_group.asg[2]: Resource 'aws_launch_configuration.cluster-lc' not found for variable 'aws_launch_configuration.cluster-lc.name.'
* aws_autoscaling_group.asg[1]: Resource 'aws_launch_configuration.cluster-lc' not found for variable 'aws_launch_configuration.cluster-lc.name.'
* aws_autoscaling_group.asg[0]: Resource 'aws_launch_configuration.cluster-lc' not found for variable 'aws_launch_configuration.cluster-lc.name.'

【问题讨论】:

element(aws_launch_configuration.cluster-lc.name, count.index)? 产生同样的错误 啊,会的。我忘记了*element(aws_launch_configuration.cluster-lc.*.name, count.index)。无论如何,你想出了另一种方式。 【参考方案1】:

我通过阅读 hashcorp 网站上的一些相关材料 (https://www.terraform.io/docs/configuration/interpolation.html#using-templates-with-count) 找到了答案。

以下对我有用。

resource "aws_autoscaling_group" "asg" 
  count                = 3
  desired_capacity     = 1
  launch_configuration = "$aws_launch_configuration.cluster-lc.*.name[count.index]"
  max_size             = 1
  min_size             = 1
  name                 = "asg-$count.index"
  vpc_zone_identifier  = ["$var.subnets.[count.index]"]

【讨论】:

以上是关于通过自动缩放组中的 count.index 引用启动配置的主要内容,如果未能解决你的问题,请参考以下文章

如何在自动缩放组中添加 aws new elb

AWS - 重建 Autoscale 组中的所有实例

使用 AWS CLI 或 Python 增加自动扩展组中的实例数

在自动扩展组中的 EC2 启动和关闭时运行命令

网络负载均衡器目标组中的 AWS Auto Scaling 目标

EC2 实例可以拒绝自动缩放终止吗?