【问题标题】:Terraform - creating multiple bucketsTerraform - 创建多个存储桶
【发布时间】:2019-05-14 19:49:43
【问题描述】:

创建存储桶非常简单。

resource "aws_s3_bucket" "henrys_bucket" {
  bucket                  = "${var.s3_bucket_name}"
  acl                     = "private"
  force_destroy           = "true"
}

最初我以为我可以为 s3_bucket_name 变量创建一个列表,但我收到了一个错误:

Error: bucket must be a single value, not a list

-

variable "s3_bucket_name" {
  type = "list"
  default  = ["prod_bucket", "stage-bucket", "qa_bucket"]
}

如何在不重复代码的情况下创建多个存储桶?

【问题讨论】:

    标签: amazon-web-services amazon-s3 terraform


    【解决方案1】:

    您可以像这样使用countelement 的组合:

    variable "s3_bucket_name" {
      type    = "list"
      default = ["prod_bucket", "stage-bucket", "qa_bucket"]
    }
    
    resource "aws_s3_bucket" "henrys_bucket" {
      count         = "${length(var.s3_bucket_name)}"
      bucket        = "${element(var.s3_bucket_name, count.index)}"
      acl           = "private"
      force_destroy = "true"
    }
    

    编辑:根据@ydaetskcoR 的建议,您可以使用list[index] 模式而不是元素。

    variable "s3_bucket_name" {
      type    = "list"
      default = ["prod_bucket", "stage-bucket", "qa_bucket"]
    }
    
    resource "aws_s3_bucket" "henrys_bucket" {
      count         = "${length(var.s3_bucket_name)}"
      bucket        = "${var.s3_bucket_name[count.index]}"
      acl           = "private"
      force_destroy = "true"
    }
    

    【讨论】:

    • 我建议使用 list[index] 语法而不是 element(list, index) 语法,除非您确实需要能够循环回列表(例如将实例分布在子网或其他您有不相等列表的事情上长度)。
    • @ydaetskcoR 你能举个例子吗?
    • 好点。我已经更新了答案以显示新的 list[index] 语法
    • @ConorMongey @ydaetskcoR 我将如何将策略附加到 s3 存储桶。我收到一个错误 Resource 'aws_iam_policy.nexus_user_policy' not found for variable 'aws_iam_policy.nexus_user_policy.arn' stackoverflow.com/questions/53770191/…
    • 当我这样做时,我得到Error: Duplicate provider configuration 这是否意味着我需要为每个存储桶提供一个唯一的提供程序?
    猜你喜欢
    • 2021-12-16
    • 2021-09-27
    • 2021-08-14
    • 2020-03-02
    • 2021-07-02
    • 1970-01-01
    • 2018-05-29
    • 2022-01-12
    • 2018-05-20
    相关资源
    最近更新 更多