找不到资源的地形

时间:2019-01-06 09:22:45

标签: amazon-web-services terraform autoscaling terraform-provider-aws

我正在尝试使用Terraform创建自动缩放组的cloudwatch警报。我已经将terraform模块与github源一起用于cloudwatch警报。

我用于设置自动缩放组的代码是:

   resource "aws_launch_configuration" "main" {
     name_prefix          = "${format("%s-%s-postgres-", var.name, var.environment)}"
     instance_type        = "${var.instance_type}"
     image_id             = "${var.ami}"
     key_name             = "${var.key_name}"
     iam_instance_profile = "${aws_iam_instance_profile.server.id}"
     security_groups      = ["${var.security_groups}", "${aws_security_group.main.id}"]
     user_data            = "${data.template_file.main.rendered}"

  root_block_device {
    volume_size           = "${var.root_volume_size}"
    volume_type           = "gp2"
    delete_on_termination = true
  }

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_autoscaling_group" "main" {
  count                     = "${var.size}"
  name                      = "${var.name}-${var.environment}-postgres-asg-${count.index}"
  launch_configuration      = "${aws_launch_configuration.main.name}"
  max_size                  = "${var.max_size}"
  min_size                  = "${var.min_size}"
  desired_capacity          = "${var.desired_capacity}"
  health_check_type         = "EC2"
  health_check_grace_period = 600
  force_delete              = false
  load_balancers            = ["${aws_elb.main.name}"]
  vpc_zone_identifier       = ["${element(var.subnet_ids, count.index % length(var.subnet_ids))}"]
  termination_policies      = ["OldestLaunchConfiguration", "Default"]
  depends_on                = ["aws_launch_configuration.main"]

  tags = ["${list(
    map(
      "key", "Name",
      "value", "${var.name}-${var.environment}-postgres-${count.index}",
      "propagate_at_launch", true
    ),
    map(
      "key", "role",
      "value", "postgres",
      "propagate_at_launch", true
    ),
    map(
      "key", "LaunchConfigName",
      "value", "${aws_launch_configuration.main.name}",
      "propagate_at_launch", true
    ),
    map(
      "key", "ServerGroupIndex",
      "value", count.index,
      "propagate_at_launch", true
    ),
    map(
      "key", "Function",
      "value", "${var.name}",
      "propagate_at_launch", true
    ),
    map(
      "key", "Stage",
      "value", "${var.environment}",
      "propagate_at_launch", true
    )
  )}"]

  lifecycle {
    create_before_destroy = true
  }
}

用于Cloudwatch警报的Terraform代码为:

module "alarm-asg-cpu" {
  source = "git::git@github.com:gruntwork-io/module-aws-monitoring.git//modules/alarms/asg-cpu-alarms?ref=v0.9.1"
  alarm_sns_topic_arns                    = ["${var.ebs_backup_sns_topic}"]
  asg_names                               = ["${aws_autoscaling_group.main.name}"]
  num_asg_names                           ="1"
  high_cpu_utilization_threshold          = "10"
  high_cpu_utilization_period             = "60"
  high_cpu_utilization_evaluation_periods = "1"
  high_cpu_utilization_statistic          = "Average"
}

module "alarm-asg-disk" {
  source = "git::git@github.com:gruntwork-io/module-aws-monitoring.git//modules/alarms/asg-disk-alarms?ref=v0.9.1"
  alarm_sns_topic_arns                     = ["${var.ebs_backup_sns_topic}"]
  asg_names                                = ["${aws_autoscaling_group.main.name}"]
  num_asg_names                            ="1"
  file_system                              = "/dev/xvdh"
  mount_path                               = "/var/lib/pgsql"
  high_disk_utilization_threshold          = "10"
  high_disk_utilization_period             = "60"
  high_disk_utilization_evaluation_periods = "1"
  high_disk_utilization_statistic          = "Maximum" 
}

当我运行Terraform Plan命令时。它显示以下错误:

enter image description here

我陷入了这个问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

因此您可以在资源自动缩放中设置计数

resource "aws_autoscaling_group" "main" {
  count                     = "${var.size}"
  ...

将按照以下格式创建资源,具体取决于您设置的大小计数。

aws_autoscaling_group.main[0]
aws_autoscaling_group.main[1]
aws_autoscaling_group.main[2]
...

然后,当您从module "alarm-asg-cpu"进行引用时,也需要对其进行设置计数。

这就是为什么它找不到资源aws_autoscaling_group.main

的原因

但是terraform中存在一个未解决的问题,您无法在模块中设置count

https://github.com/hashicorp/terraform/issues/953

因此,您需要考虑其他解决方法,例如,不要使用count创建资源aws_autoscaling_group,而是逐个创建资源