Terraform - 创建多个存储桶

hfr*_*nco 3 amazon-s3 amazon-web-services terraform

创建存储桶非常简单。

resource "aws_s3_bucket" "henrys_bucket" {
  bucket                  = "${var.s3_bucket_name}"
  acl                     = "private"
  force_destroy           = "true"
}
Run Code Online (Sandbox Code Playgroud)

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

Error: bucket must be a single value, not a list
Run Code Online (Sandbox Code Playgroud)

——

variable "s3_bucket_name" {
  type = "list"
  default  = ["prod_bucket", "stage-bucket", "qa_bucket"]
}
Run Code Online (Sandbox Code Playgroud)

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

Con*_*gey 5

您可以像这样使用count&的组合element

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"
}
Run Code Online (Sandbox Code Playgroud)

编辑:根据@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"
}
Run Code Online (Sandbox Code Playgroud)