Terraform provisioner local exec对每个.key的访问权限

Terraform provisioner local exec对每个.key的访问权限,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,Terraform v0.12.6,provider.aws v2.23.0 我正在尝试使用新的for_创建两个aws实例。不要认为这是aws提供商的问题,更多的是terraform/for_each/provisioner的问题 在我尝试添加本地exec资源调配步骤之前,一直按广告中的方式工作。 不知道如何修改本地exec示例以使用for.each变量。我得到一个关于周期的地形错误 locals { instances = { s1 = { private_ip = "

Terraform v0.12.6,provider.aws v2.23.0

我正在尝试使用新的for_创建两个aws实例。不要认为这是aws提供商的问题,更多的是terraform/for_each/provisioner的问题

在我尝试添加本地exec资源调配步骤之前,一直按广告中的方式工作。 不知道如何修改本地exec示例以使用for.each变量。我得到一个关于周期的地形错误

locals {
  instances = {
    s1 = {
      private_ip = "192.168.47.191"
    },
    s2 = {
      private_ip = "192.168.47.192"
    },
  }
}

provider "aws" {
  profile    = "default"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  for_each = local.instances

  ami           = "ami-032138b8a0ee244c9"
  instance_type = "t2.micro"

  availability_zone = "us-east-1c"

  private_ip = each.value["private_ip"]

  ebs_block_device {
    device_name = "/dev/sda1"
    volume_size = 2
  }

  provisioner "local-exec" {
    command = "echo ${aws_instance.example[each.key].public_ip} >> ip_address.txt"
  }
}
但是,请记住这个错误

./terraform apply

Error: Cycle: aws_instance.example["s2"], aws_instance.example["s1"]

for_each.key变量是否应在配置步骤中工作?稍后还有其他获取公共ip的方法,可以使用testate文件,也可以查询给定实例ID的aws,但是访问本地exec配置中的资源变量似乎在很多方面都很方便。

尝试使用
self
变量:

  provisioner "local-exec" {
    command = "echo ${self.public_ip} >> ip_address.txt"
  }
请读者注意,每个的资源级别
在Terraform中是一个相对较新的功能,要求版本
=0.12.6