【问题标题】:provisioner local-exec access to each.key供应商本地执行访问 each.key
【发布时间】:2019-12-19 14:32:06
【问题描述】:

Terraform v0.12.6,provider.aws v2.23.0

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

在我尝试添加本地执行配置步骤之前,它一直像宣传的那样工作。 不知道如何修改 local-exec 示例以使用 for.each 变量。我收到一个关于循环的 terraform 错误。

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 变量在配置步骤中起作用?以后还有其他方法可以获取 public_ip,方法是使用 testate 文件或查询给定实例 id 的 aws,但是在 local-exec 配置中访问资源变量似乎在很多方面都派上用场。

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案1】:

    尝试使用self 变量:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      相关资源
      最近更新 更多