我有一个像这样的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
答案 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表示资源输出是列表,而不是单个元素类型。