У меня есть следующий модуль, который создает приватное ведро. Я хочу использовать ведение журнала, только когда я определяю непустой аргумент logging
в вызове моего модуля:
variable "tags" {
description = "A mapping of tags to assign to the bucket."
type = "map"
default = {}
}
variable "logging" {
description = "A mapping of logging to assign to the bucket."
type = "map"
default = {}
}
resource "aws_s3_bucket" "private_bucket" {
bucket = "${var.bucket}"
acl = "private"
policy = "${data.aws_iam_policy_document.policy.json}"
tags = "${var.tags}"
# logging = "${var.logging}"
logging = "${length(keys(var.logging)) > 0 ? var.logging : null}"
# ...
# This block is replaced by the argument
/* logging {
target_bucket = "${var.logging_bucket}"
target_prefix = "s3/${local.bucket_id}/"
} */
# ...
}
Однако это не работает. Я называю модуль так:
module "private_bucket" {
source = "modules/private-bucket"
bucket = "${local.private_bucket_name}"
tags {
Name = "Serverless stack private bucket"
Environment = "${local.stage}"
}
}
Почему высокоуровневый if-else не реализован в Terraform? Есть ли альтернатива для инициализации переменной в модуле / ресурсе условным, а не только ее значением?
Edit:
Вот псевдокод, чего я хочу достичь:
resource "aws_s3_bucket" "private_bucket" {
bucket = "${var.bucket}"
acl = "private"
policy = "${data.aws_iam_policy_document.policy.json}"
tags = "${var.tags}"
# if var.logging is not an empty object,
# then initialize logging with the object
if (var.logging != {}) {
logging = "${var.logging}"
}
# ...
}