Terraform 地形、aws_eip、供应器、本地执行器、不一致的ip地址

Terraform 地形、aws_eip、供应器、本地执行器、不一致的ip地址,terraform,Terraform,运行“terraform apply”以使用aws_eip和provisioner local exec Com创建最小ec2配置并将实例的ip登录到日志文件后,记录的ip与分配给创建实例的ip不同 示例.tf: provider "aws" { access_key = "" secret_key = "" region = "us-east-1" } resource "aws_instance" "example" {

运行“terraform apply”以使用aws_eip和provisioner local exec Com创建最小ec2配置并将实例的ip登录到日志文件后,记录的ip与分配给创建实例的ip不同

示例.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中的地址为=已创建ec2实例中的elasticIp

实际为:日志文件中的ip:34.239.128.148
ip ec2创建实例:3.216.120.212

当使用
aws_eip
为实例分配弹性ip地址时,将使用分配的弹性ip地址的任何操作都必须使用
aws_ip.ip.public_ip
,而不是
aws_实例。例如.public_ip
,因为后者是实例启动时分配给它的普通公共IP地址,而弹性IP地址是在启动后异步分配的

在这种情况下,这意味着将供应器移动到
aws_ip
资源中:

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

  provisioner "local-exec" {
    command = "echo ${self.public_ip} >ip_address.txt"
  }
}
但是,如果您将IP地址写入文件以便在其他地方使用,则最好将其导出为:


弹性IP地址和公共IP地址不是一回事:。此外,您应该使用
输出
清晰地显示这些值:
output "public_ip" {
  value = "${aws_eip.ip.public_ip}"
}