【问题标题】:Terraform, aws_eip, provisioner, local-exec, inconsistent ip addrTerraform、aws_eip、provisioner、local-exec、不一致的 ip addr
【发布时间】:2019-09-30 19:15:46
【问题描述】:

在运行“terraform apply”以使用 aws_eip 和配置程序 local-exec 命令创建最小 ec2 配置并将实例的 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 中的地址 = elasticIp in created ec2 instance;

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

【问题讨论】:

标签: terraform


【解决方案1】:

当使用aws_eip为实例分配弹性IP地址时,任何将使用分配的弹性IP地址的操作必须使用aws_ip.ip.public_ip而不是aws_instance.example.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 地址写入文件以便在其他地方使用,最好将其导出为output value

output "public_ip" {
  value = "${aws_eip.ip.public_ip}"
}

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 2023-02-14
    • 2020-01-02
    • 1970-01-01
    • 2020-07-07
    • 2018-11-07
    • 1970-01-01
    • 2015-11-26
    • 2020-06-08
    相关资源
    最近更新 更多