【发布时间】:2019-11-01 05:11:50
【问题描述】:
我正在编写 terraform 模板来创建两个 S3 存储桶,但是,我的要求是将它们的名称连接到 vars.tf 中,然后将其传递给主 tf 文件。下面是 vars.tf 和主 s3.tf 文件。
vars.tf:
variable TENANT_NAME {
default = "Mansing"
}
variable BUCKET_NAME {
type = "list"
default = ["bh.${var.TENANT_NAME}.o365.attachments", "bh.${var.TENANT_NAME}.o365.eml"]
}
s3.tf:
resource "aws_s3_bucket" "b" {
bucket = "${element(var.BUCKET_NAME, 2)}"
acl = "private"
}
什么时候做 terraform plan 我得到一个错误,表明 var 可能在这里不起作用。
Error: Variables not allowed
on vars.tf line 10, in variable "BUCKET_NAME":
10: default = ["bh.${var.TENANT_NAME}.o365.attachments", "bh.${var.TENANT_NAME}.o365.eml"]
Variables may not be used here.
Error: Variables not allowed
on vars.tf line 10, in variable "BUCKET_NAME":
10: default = ["bh.${var.TENANT_NAME}.o365.attachments", "bh.${var.TENANT_NAME}.o365.eml"]
Variables may not be used here.
我尝试用语言环境替换 vars 文件中的 var,但没有成功。
【问题讨论】:
-
格式("%s/%s", var.var1, var.var2)
-
如果你想使用变量作为其他变量默认值的一部分进行插值,那么你需要使用
local:terraform.io/docs/configuration/locals.html -
当我使用本地人时同样的错误。 ``` 变量 TENANT_NAME { default = "mansing" } locals { first_env = "bh.${var.TENANT_NAME}.o365.attachments" second_env = "bh.${var.TENANT_NAME}.o365.eml" } 变量 BUCKET_NAME {类型 = “列表” 默认 = [local.first_env, local.second_env] } ```
-
当我在 Main.tf 中使用 Locals 而不是在 vars.tf 中使用它并且还使用了 vars.tf 中定义的变量时,它起作用了。
locals { s3_names = ["bh.${var.TENANT_NAME}.o365.attachments", "bh.${var.TENANT_NAME}.o365.eml"] }
标签: amazon-s3 terraform terraform-provider-aws