Amazon s3 如何在Terraform变量中连接S3 bucket名称并将其传递给主tf文件

Amazon s3 如何在Terraform变量中连接S3 bucket名称并将其传递给主tf文件,amazon-s3,terraform,terraform-provider-aws,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", "

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

您可以使用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"
}

格式(“%s/%s”,var.var1,var.var2)如果要使用变量作为其他变量默认值的一部分进行插值,则需要使用
local
:在使用局部变量时,可能会重复相同的错误。`````变量TENANT_NAME{default=“mansing”}locals{first_env=“bh.${var.TENANT_NAME}.o365.attachments”second_env=“bh.${var.TENANT_NAME}.o365.eml”}变量BUCKET_NAME{type=“list”default=[local.first_env,local.second_env]}``它起作用了,当我在Main.tf中使用局部变量而不是在vars.tf中使用它时,我还使用了vars.tf中定义的变量<代码>局部变量{s3_NAME=[“bh.${var.TENANT_NAME}.o365.attachments”,“bh.${var.TENANT_NAME}.o365.eml”]}