【问题标题】:Terraform optional provider for optional resourceTerraform 可选资源的可选提供程序
【发布时间】:2022-04-20 18:28:36
【问题描述】:

我有一个模块,我想在另一个区域有条件地创建一个 s3 存储桶。我试过这样的事情:

resource "aws_s3_bucket" "backup" {
   count = local.has_backup ? 1 : 0
   provider = "aws.backup"
   bucket = "${var.bucket_name}-backup"
   versioning { 
     enabled = true
   }
}

但即使计数为 0,我似乎也需要提供 aws.backup 提供程序。有什么办法解决这个问题吗?

注意:如果我可以使用单个提供程序在多个区域创建存储桶,这将不是问题,请参阅https://github.com/terraform-providers/terraform-provider-aws/issues/8853

【问题讨论】:

  • 据我所知,没有办法解决这个问题。您是否有不想声明 aws.backup 供应商的特殊原因?
  • 因为大多数时候我不需要它
  • 对于模块的用户来说,必须为模块期望的两个提供者两次传递相同的提供者有点尴尬。

标签: terraform terraform-provider-aws


【解决方案1】:

根据您的描述,我了解到您希望使用相同的“配置文件”创建资源,但位于不同的区域。 对于这种情况,我会采取以下方法:

为您创建一个模块文件 s3_bucket_backup,在该文件中您将使用变量构建您的“备份提供程序”。

# Module file for s3_bucket_backup
provider "aws" {
  region  = var.region
  profile = var.profile
  alias   = "backup"
}

variable "profile" {
  type            = string
  description     = "AWS profile"
}

variable "region" {
  type            = string
  description     = "AWS profile"
}

variable "has_backup" {
  type            = bool
  description     = "AWS profile"
}

variable "bucket_name" {
  type            = string
  description     = "VPC name"
}

resource "aws_s3_bucket" "backup" {
   count          = var.has_backup ? 1 : 0
   provider       = aws.backup
   bucket         = "${var.bucket_name}-backup"
}

在您的主 tf 文件中,使用局部变量声明您的提供者配置文件,调用传递配置文件和不同区域的模块

# Main tf file
provider "aws" {
  region      = "us-east-1"
  profile     = local.profile
}

locals {
  profile     = "default"
  has_backup  = false
}

module "s3_backup" {
  source            = "./module"
  profile           = local.profile
  region            = "us-east-2"
  has_backup        = true
  bucket_name       = "my-bucket-name"
}

你有了它,你现在可以使用不同区域的相同“配置文件”构建你的 s3_bucket_backup。

在上面的例子中,主文件使用的区域是us-east-1,bucket是在us-east-2上创建的。

如果将 has_backup 设置为 false,则不会创建任何内容。

由于“备份提供程序”是在模块内部构建的,因此您的代码不会因为在主 tf 文件中有多个提供程序而显得“脏”。

【讨论】:

    猜你喜欢
    • 2019-10-06
    • 2021-10-14
    • 1970-01-01
    • 2021-03-17
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多