如何在Terraform变量中串联S3存储桶名称并将其传递到主tf文件

时间:2019-06-18 14:11:37

标签: amazon-s3 terraform terraform-provider-aws

我正在编写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计划,我收到一条错误消息,指示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,但是没有用。

1 个答案:

答案 0 :(得分:1)

您可以使用Terraform locals块来连接s3.tf文件中的变量值:

locals {
  BUCKET_NAME = [
    "bh.${var.TENANT_NAME}.o365.attachments",
    "bh.${var.TENANT_NAME}.o365.eml"
  ]
}

resource "aws_s3_bucket" "b" {
  bucket = "${element(local.BUCKET_NAME, 2)}"
  acl    = "private"
}