Невозможно получить publi c IP-адрес спотового экземпляра с помощью Terraform - PullRequest
0 голосов
/ 05 мая 2020

Я запускаю спотовый экземпляр, как вы можете видеть в конфигурации ниже, а затем пытаюсь получить IP-адрес с места. Кажется, он отлично работает с обычным экземпляром ec2 (ie. Это не спотовый экземпляр).

Я получаю следующую ошибку:

aws_route53_record.staging: Resource ' aws_spot_instance_request.app-ec2 'не имеет атрибута' public_ip 'для переменной' aws_spot_instance_request.app-ec2.public_ip '

Вот конфигурация, которую я использую:

resource "aws_spot_instance_request" "app-ec2" {
    ami = "ami-1c999999"
    spot_price    = "0.008"
    instance_type = "t2.small"
    tags {
        Name = "${var.app_name}"
    }
    key_name = "mykeypair"
    associate_public_ip_address = true
    vpc_security_group_ids = ["sg-99999999"]
    subnet_id = "subnet-99999999"
    iam_instance_profile = "myInstanceRole"
    user_data = <<-EOF
#!/bin/bash
echo ECS_CLUSTER=APP-STAGING >> /etc/ecs/ecs.config
    EOF
}

resource "aws_route53_record" "staging" {
   zone_id = "XXXXXXXX"
   name = "staging.myapp.com"
   type = "A"
   ttl = "300"
   records = ["${aws_spot_instance_request.app-ec2.public_ip}"]

Спотовый запрос выполняется на консоли AWS, как показано ниже: enter image description here

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Итак, я пытался понять это с прошлой ночи и постоянно видел, что запрос спотового экземпляра выполняется через консоль AWS. Точно так же я мог видеть IP-адрес publi c для спота, и это вводило меня в заблуждение.

Оказывается, мне не хватало 1 строки (аргумента) в моем скрипте:

wait_for_fulfillment = true

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

Теперь Terraform будет ждать выполнения запроса на спот. Согласно документации, он выдаст ошибку, если будет достигнут тайм-аут 10 м.

0 голосов
/ 06 мая 2020

Я попробовал фрагмент кода, который вы предоставили с версией Terraform 0.12.10, и получил ту же ошибку. Я проверил файл terraform.tfstate и увидел, что поля еще не заполнены (например, private_ip, public_ip и public_dns были установлены на null). Я проверил раздел «Спотовые запросы» в консоли AWS и увидел следующий статус: price-too-low: Your Spot request price of 0.0075 is lower than the minimum required Spot request fulfillment price of 0.008. Состояние запроса все еще было открыто, поэтому все переменные в файле состояния были установлены на null.

...