Terraform с не найденным ресурсом

Я пытаюсь создать предупреждение Cloudwatch группы автоматического масштабирования с помощью terraform. Я использовал модуль 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
  }
}

А код Terraform для тревожных сигналов облачных часов:

module "alarm-asg-cpu" {
  source = "git::[email protected]: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::[email protected]: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. он показывает следующую ошибку:

введите здесь описание изображения

Я застрял в этой проблеме. Как я могу решить эту проблему?


person Deependra Dangal    schedule 06.01.2019    source источник
comment
Весь этот код находится в одном каталоге? Кажется, второй файл вызывается родительским модулем postgres.   -  person Quentin Revel    schedule 06.01.2019
comment
Нет, весь этот код находится в том же файле с именем main.tf   -  person Deependra Dangal    schedule 06.01.2019
comment
@QuentinRevel Я использовал исходный код github с модулем для сигнализации облачных часов? Это проблема репозитория github?   -  person Deependra Dangal    schedule 06.01.2019
comment
Я так не думаю, я не понимаю, почему не работает   -  person Quentin Revel    schedule 06.01.2019
comment
Где модуль Postgres, на который он жалуется?   -  person ydaetskcoR    schedule 06.01.2019
comment
Когда вы запускаете apply, что будет на выходе? Была ли ASG создана до начала создания модулей? TF обычно хорошо упорядочивает зависимости, но вам, возможно, придется дать ему подсказку с помощью зависит от   -  person Tyler Smith    schedule 08.01.2019
comment
Вам не хватает половины кода.   -  person James Woolfenden    schedule 08.01.2019
comment
Можете ли вы запустить terraform console и запустить aws_autoscaling_group.main.name - дает ли это какой-либо результат?   -  person pradeep    schedule 08.01.2019


Ответы (1)


Итак, вы устанавливаете счетчик в автомасштабировании ресурсов

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, а создавать их один за другим.

person BMW    schedule 09.01.2019