【问题标题】:How to create multiple resources in one main.tf file with Terraform module如何使用 Terraform 模块在一个 main.tf 文件中创建多个资源
【发布时间】:2022-07-01 02:00:16
【问题描述】:

我创建了一个简单的 Terraform 模块来创建 S3 存储桶。当我只想创建一个存储桶时它工作正常,但如果我想创建多个存储桶怎么办?当然,我不需要为要创建的每个存储桶创建一个 main.tf 文件吗?我知道这是一个菜鸟问题,但如果有任何帮助,我将不胜感激。

因此,如果我只想更改同一 main.tf 文件中的存储桶名称和标签,那么正确的方法是什么,而不是这样做(无论如何都会产生错误)?我可以创建存储桶名称列表并对其进行迭代吗?

module "s3_buckets" {
  source       = "../modules/s3_buckets"
  bucket_name = "my-tf-bucket-1"
  tag          = "tf"
}

module "s3_buckets" {
  source       = "../modules/s3_buckets"
  bucket_name = "my-tf-bucket-2"
  tag          = "tf"
}

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    您可以使用for-each 元参数。这可能是这样的:

    module "s3_buckets" {
      for_each = toset(["my-tf-bucket-1", "my-tf-bucket-2"])
      source       = "../modules/s3_buckets"
      bucket_name = "${each.key}"
      tag          = "tf"
    }
    

    【讨论】:

    • 是的,完美。谢谢
    • 这应该足够了bucket_name = each.key
    【解决方案2】:

    值得注意的是,当您想要或需要为资源定义不同的属性时,可以使用for_each 的替代方法。 module 后面的字符串可以不同:

    module "s3_bucket1" {
      source       = "../modules/s3_buckets"
      bucket_name = "my-tf-bucket-1"
      tag          = "tf"
    }
    
    module "s3_bucket2" {
      source       = "../modules/s3_buckets"
      bucket_name = "my-tf-bucket-2"
      tag          = "tf"
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-19
      • 1970-01-01
      • 2018-12-14
      • 2018-11-24
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2021-11-10
      相关资源
      最近更新 更多