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

问题描述 投票:2回答:1

我正在编写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,但是没有用。

amazon-s3 terraform terraform-provider-aws
1个回答
0
投票

您可以使用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"
}
© www.soinside.com 2019 - 2024. All rights reserved.