【发布时间】:2019-01-07 00:59:46
【问题描述】:
在file1.tf(由kops生成)我有这样的资源:
resource "aws_vpc" "my-vpc-tf-id" {
...
}
资源ID是kops动态生成的,也添加到terraform.tfvars中(所以可以在.tf文件的其他地方使用):
my_var = "my-vpc-tf-id"
现在我想引用来自 file2.tf 的 VPC 资源,而不对其名称进行硬编码:
resource "aws_security_group" "db" {
...
vpc_id = "${aws_vpc.${var.my_var}.id}"
...
}
但是 Terraform 抱怨 ${var.my_var} 是不允许的。所以我在file2.tf 中定义了这个:
resource "aws_security_group" "db" {
...
vpc_id = "${aws_vpc.{{MY_VAR_VAL}}.id}"
...
}
我使用sed 将占位符替换为值。这很好用,但会使某些其他任务复杂化,所以我想知道是否有其他方法可以在不使用 sed 或硬编码 my_var 值(只是 Terraform 的 HCL)的情况下实现这一目标。
【问题讨论】:
-
生成具有可变资源名称的文件不是使用 terraform 的预期方式。 terraform 中的名称应该是合乎逻辑且固定的。不幸的是,由于您使用了 kops,您必须遵守这一点。在这种情况下,
sed解决方法似乎是最好的。也许用 kops 打开一个问题并在那里描述你的问题? -
Markus 的评论是正确的,根据github.com/hashicorp/terraform/issues/18456。不幸的是,那里描述的解决方法似乎并不适用。