Terraform destroy не в состоянии очистить точечные экземпляры флота ec2 - PullRequest
0 голосов
/ 17 октября 2019

Уничтожение Terraform не уничтожает созданные точечные экземпляры, когда один и тот же tf-файл выполняется с разными рабочими пространствами

У меня есть требование к моей инфраструктуре CI для создания и уничтожения кластера ECS с точечными экземплярами EC2 для создания ипроверить мой кодДля этого я использую terraform для создания aws_spot_fleet_request с набором конфигураций запуска. Поскольку в репо у меня будет несколько веток, я буду запускать эту terraform с именем рабочей области uniq для каждой ветви. Когда две ветви применяют мою терраформу, она правильно создает уникальные экземпляры на основе рабочей области. Однако, когда один из них подходит к этапу запуска уничтожения terraform, он просто ждет уничтожения и в итоге выдает ошибку ниже

ws_spot_fleet_request.arm_ct_spot_resource: Все еще уничтожается ... (ID:, 3m30s прошло) aws_spot_fleet_requestРесурс: Все еще уничтожается ... (ID: 4m10s прошло) aws_spot_fleet_request.arm_ct_spot_resource: все еще уничтожается ... (ID: 4m20s прошло) aws_spot_fleet_request.arm_ct_spot_resource: по-прежнему уничтожаетсяУничтожение ... (ID: 4m40s прошло) aws_spot_fleet_request.arm_ct_spot_resource: Все еще уничтожается ... (ID: 4m50s прошло) aws_spot_fleet_request.arm_ct_spot_resource: Все еще уничтожается ... (ID:,5m0s прошло) Отпустить блокировку состояния. Это может занять несколько минут ...

Ошибка: ошибка при применении плана:

1 произошла ошибка (и):

  • aws_spot_fleet_request.arm_ct_spot_resource (уничтожить): произошла 1 ошибка:

  • aws_spot_fleet_request.arm_ct_spot_resource: ошибка при удалении точечного запроса (): во флоте по-прежнему есть (1) запущенных экземпляров

Terraform не выполняет автоматический откат в случае ошибок. Вместо этого ваш файл состояния Terraform был частично обновлен любыми успешно завершенными ресурсами. Пожалуйста, устраните вышеуказанную ошибку и повторите попытку, чтобы постепенно изменить свою инфраструктуру.

resource "aws_spot_fleet_request" "arm_ct_spot_resource" {
  iam_fleet_role                      = "${aws_iam_role.fleet.arn}"
  target_capacity                     = "${var.instance_count}"
  terminate_instances_with_expiration = true
  allocation_strategy                 = "lowestPrice"
  wait_for_fulfillment                = true

  launch_specification {
    instance_type               = "t3.2xlarge"
    ami                         = "${data.aws_ami.ecs_agent_image.id}"
    vpc_security_group_ids      = ["${aws_security_group.security_group_sg.id}"]
    subnet_id                   = "${element(data.terraform_remote_state.environment_state.vpc_service_subnet_ids_2, 0)}"
    iam_instance_profile        = "${aws_iam_instance_profile.arm_iam_profile.name}"
    associate_public_ip_address = true
    key_name                    = "${var.key_name}"
    weighted_capacity           = 1

    # Tags defined in locals only.
    tags = "${merge(
      local.common_tags,
      map(
        "Name", "aws_instance for ${var.environment_id}"
      )
    )}"

    root_block_device {
      volume_size = "${var.disk_size}"
    }

    user_data = <<EOF
#!/bin/bash
echo ECS_CLUSTER="${aws_ecs_cluster.arm_cluster.name}" >> /etc/ecs/ecs.config
EOF
  }

  launch_specification {
    instance_type               = "c5.9xlarge"
    ami                         = "${data.aws_ami.ecs_agent_image.id}"
    vpc_security_group_ids      = ["${aws_security_group.security_group_sg.id}"]
    subnet_id                   = "${element(data.terraform_remote_state.environment_state.vpc_service_subnet_ids_2, 0)}"
    iam_instance_profile        = "${aws_iam_instance_profile.arm_iam_profile.name}"
    associate_public_ip_address = true
    key_name                    = "${var.key_name}"
    weighted_capacity           = 4

    # Tags defined in locals only.
    tags = "${merge(
      local.common_tags,
      map(
        "Name", "aws_instance for ${var.environment_id}"
      )
    )}"

    root_block_device {
      volume_size = "${var.disk_size}"
    }

    user_data = <<EOF
#!/bin/bash
echo ECS_CLUSTER="${aws_ecs_cluster.arm_cluster.name}" >> /etc/ecs/ecs.config
EOF
  }
}

1 Ответ

0 голосов
/ 18 октября 2019

Звучит так, как будто вы развертываете несколько ресурсов Terraform в одном и том же общем компоненте. Если вы уничтожите один ресурс terraform, и все еще будут развернуты другие ресурсы, использующие этот компонент, то вы не сможете уничтожить, как ожидалось. Это типично для ресурсов EC2, в которых используется общая группа безопасности, если попытка уничтожить группу безопасности, которая все еще подключена к EC2, не удастся уничтожить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...