Terraform, aws_eip, инициатор, local-exec, несовместимый IP-адрес - PullRequest
0 голосов
/ 13 мая 2019

после запуска 'terraform apply', чтобы создать минимальную конфигурацию ec2 с помощью aws_eip и команды инициатора local-exec для регистрации ip экземпляра в файле журнала, зарегистрированный ip отличается от ip, назначенного созданному экземпляру

example.tf:

 provider "aws" {
      access_key = ""
      secret_key = ""
      region     = "us-east-1"
    }

    resource "aws_instance" "example" {
      ami           = "ami-b374d5a5"
      instance_type = "t2.micro"

      provisioner "local-exec" {
        command = \
        "echo ${aws_instance.example.public_ip} >ip_address.txt"
      }
    }

    resource "aws_eip" "ip" {
    instance = "${aws_instance.example.id}"
    }

ожидаемый результат: адрес в файле журнала ip_addtess.txt is =asticIp в созданном экземпляре ec2;

фактически: ip в файле журнала: 34.239.128.148 ip ec2 создал экземпляр: 3.216.120.212

1 Ответ

1 голос
/ 14 мая 2019

При назначении Elastic IP-адреса экземпляру, используя aws_eip, любые операции, которые будут использовать выделенный Elastic IP-адрес, должны использовать aws_ip.ip.public_ip вместо aws_instance.example.public_ip, поскольку последний является обычным общедоступным IP-адресом, назначенным дляслучай, когда он начался, тогда как Elastic IP-адрес впоследствии назначается асинхронно.

В этом случае это будет означать перемещение поставщика в ресурс aws_ip вместо:

resource "aws_eip" "ip" {
  instance = "${aws_instance.example.id}"

  provisioner "local-exec" {
    command = "echo ${self.public_ip} >ip_address.txt"
  }
}

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

output "public_ip" {
  value = "${aws_eip.ip.public_ip}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...