Terraform无法按索引引用资源

时间:2019-10-02 17:41:35

标签: terraform

我有一个像这样的aws实例

resource "aws_instance" "an_instance" {
  count                       = "${var.instance_count}"
......
}

效果很好,但是当我添加此代码段

resource "aws_ebs_volume" "on_host_1_1" {
  availability_zone = "${aws_instance.an_instance[1].availability_zone}"
  snapshot_id       = "snap-abcdca8ee59112345f"
  tags              = "${local.all_tags}"
}

我收到以下错误:

Error reading config for aws_ebs_volume[on_host_1_1]: parse error at 1:31: expected "}" but found "."

有什么想法吗?

Terraform v0.11.14
+ provider.aws v2.25.0

1 个答案:

答案 0 :(得分:0)

您需要使用正确的语法来引用列表的特定元素。您可以查看文档here。请特别注意提及的部分:

  

要引用资源的特定实例,可以使用resource.foo.*.id[#],其中#是实例的索引号。

因此,具有正确语法的资源将是:

resource "aws_ebs_volume" "on_host_1_1" {
  availability_zone = "${aws_instance.an_instance.*.availability_zone[1]}"
  snapshot_id       = "snap-abcdca8ee59112345f"
  tags              = "${local.all_tags}"
}

这将给您您想要的行为。之所以可行,是因为splat运算符*正确地向Terraform表示资源输出是列表,而不是单个元素类型。

相关问题