Terraform 地形、aws_eip、供应器、本地执行器、不一致的ip地址
运行“terraform apply”以使用aws_eip和provisioner local exec Com创建最小ec2配置并将实例的ip登录到日志文件后,记录的ip与分配给创建实例的ip不同 示例.tf: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" {
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}"
}