供应者对每个密钥的本地执行访问

时间:2019-08-13 03:49:30

标签: terraform terraform-provider-aws

Terraform v0.12.6,provider.aws v2.23.0

Am尝试使用新的for_each构造创建两个aws实例。实际上,不要认为这是AWS提供商的问题,更多的是terraform / for_each / provisioner问题。

按广告宣传工作,直到我尝试添加本地执行配置步骤。 不知道如何修改local-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 each.key变量吗?以后还有其他方法可以通过使用遗嘱文件或查询给定实例ID的aws获取public_ip,但是在许多方式下访问local-exec配置中的资源变量似乎很方便。

1 个答案:

答案 0 :(得分:1)

尝试使用self变量:

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

请读者注意,资源级for_each是Terraform中的一个相对较新的功能,需要版本>=0.12.6