Получить terraform, чтобы игнорировать статус «associate_public_ip_address» для остановленного экземпляра - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть простое развертывание AWS с vpc, общедоступной подсетью, маршрутом и группой безопасности.Запуск terraform apply запустит экземпляр AWS, и у меня есть этот экземпляр, настроенный для связывания публичного IP-адреса.После того, как экземпляр был создан, я запускаю terraform plan, и он правильно говорит, что все обновлено.Пока проблем нет.

У нас есть узел управления, который отключит этот экземпляр, если он не используется в течение определенного периода времени в качестве меры экономии.

Вот проблема: как только этот экземплярзавершите работу, когда я запускаю terraform plan, поставщик aws видит, что все настроено правильно, но поскольку общедоступный IP-адрес был освобожден, значение для associate_public_ip_address больше не соответствует тому, что настроено в конфигурациях terraform, поэтому terraform хочет удалить и воссоздать этоэкземпляр:

associate_public_ip_address: "false" => "true" (forces new resource)

Есть ли способ заставить terraform игнорировать только этот один параметр?

Этот вопрос незначительно связан с https://github.com/hashicorp/terraform/issues/7262. Нов моем случае я не хочу устанавливать ожидаемое состояние, я просто хочу дать возможность terraform игнорировать этот один параметр, потому что это нормально, что он не связан прямо сейчас , пока он настроенбыть связанным когда оно начинается .

(Это пришло мне в голову при написании этого вопроса: я неЭто связано с настройкой подсети для автоматического связывания общедоступного IP-адреса для запущенных в нем экземпляров.Предположительно, сделав это автоматически в подсети и удалив опцию из «aws_instance», я смогу заставить terraform не обращать внимания на это значение ... но я сомневаюсь в этом.)

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете использовать блок жизненного цикла до , игнорируя определенные изменения атрибута .

. При этом ресурс изначально создается с использованием предоставленного значения для этого атрибута.При последующем планировании, применении и т. Д. Terraform будет игнорировать изменения этого атрибута.

Если мы добавим игнорирование для associate_public_ip_address в блоке жизненного цикла, остановленный экземпляр больше не будет запускать новый ресурс.

Обратите внимание, что если вы измените любой другой параметр, который потребует нового экземпляра, остановленный будет завершен и заменен.

Пример на основе кода примера Terraform aws_instance :

provider "aws" {
  region = "us-west-2"
}

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}

resource "aws_instance" "web" {
  ami           = "${data.aws_ami.ubuntu.id}"
  instance_type = "t2.micro"
  associate_public_ip_address = "true"
  tags {
    Name = "HelloWorld"
  }

  lifecycle = {
    ignore_changes = ["associate_public_ip_address"]
  }
}
...