Amazon web services 将参数传递给dev和prod集群中的模块

Amazon web services 将参数传递给dev和prod集群中的模块,amazon-web-services,amazon-s3,terraform,Amazon Web Services,Amazon S3,Terraform,嗨,我应该如何将变量只传递给一个环境 我定义了一个日志参数,我只想把这个变量传递给我的prod redshift,而不是dev redshift。dev redshift集群不应定义日志记录参数 我被困在如何在模块内部传递的问题上,我为prod和dev redshift集群提供了单独的模块 variable "logging" { target_bucket= "xxxx" } resource "aws_s3_bucket" "log_bucket" { bucket = "$

嗨,我应该如何将变量只传递给一个环境

我定义了一个日志参数,我只想把这个变量传递给我的prod redshift,而不是dev redshift。dev redshift集群不应定义日志记录参数

我被困在如何在模块内部传递的问题上,我为prod和dev redshift集群提供了单独的模块

variable "logging" {
     target_bucket= "xxxx"
}

resource "aws_s3_bucket" "log_bucket" {
  bucket = "${var.bucket}-${var.env}"
  logging = ["${var.logging}"]


module "redshift-dev" {
  source                      = "../modules/xxxx"
  env                         = "dev"
  region                      = "us-east-1"
  logging                     = {}

module "redshift-prod" {
  source                      = "../modules/xxxx"
  env                         = "prod"
  region                      = "us-east-1"
  logging                     = {
     target_bucket= "xxxx"
}

似乎您误解了如何使用terraform模块管理不同的环境

不要编写两个模块来管理dev/prod环境,一个就足够了

variable "logging" {
     target_bucket= "xxxx-${var.env}"
}

resource "aws_s3_bucket" "log_bucket" {
  bucket = "${var.bucket}-${var.env}"
  logging = ["${var.logging}"]


module "redshift" {
  source                      = "../modules/xxxx"
  env                         = "${var.env}"
  region                      = "us-east-1"
  logging                     = ${var.env == "prod" ? {} : { target_bucket= "xxxx" } }"
}
在这种情况下,管理不同环境的不同设置的关键点是使用terraform


您能否同时显示您的模块定义?最好将日志参数设置为可选参数(
default=”“
),并在模块中处理它。这将为模块创建一个更好的接口,但是很难正确地推荐它,因为他们还没有展示他们的模块代码。
The conditional syntax is the well-known ternary operation:

CONDITION ? TRUEVAL : FALSEVAL