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

标签 amazon-s3 terraform terraform-provider-aws

我正在编写 terraform 模板来创建两个 S3 存储桶,但是,我的要求是将它们的名称连接到 vars.tf 中,然后将其传递给主 tf 文件。下面是 vars.tf 和主要的 s3.tf 文件。

变量.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"
}

关于amazon-s3 - 如何在 Terraform 变量中连接 S3 存储桶名称并将其传递给主 tf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56651118/

相关文章:

terraform - 如何在子模块中使用远程状态数据源

amazon-web-services - Terraform 添加 aws_api_gateway_integration 响应 json

java - 在java中计算S3对象(文件夹)的大小

ruby-on-rails - Rails AWS-SDK : Set Expiration Date for Objects

amazon-web-services - 验证是否从 cli 启用了 s3 存储桶加密

amazon-web-services - 具有认知能力的 Sagemaker 劳动力

azure - 如何在 terraform azure for redis 中使用私有(private)端点实现?

amazon-web-services - Terraform - 放置 S3 通知配置时出错 : InvalidArgument: Unable to validate the following destination configurations

php - 用于 php 的 Amazon s3 SDK 无法获取 Bucket 对象列表

amazon-web-services - 使用 Terraform 在对象内迭代列表