我正尝试使用链接中示例中的Terraform创建S3存储桶 https://www.terraform.io/docs/providers/aws/r/s3_bucket.html 我已经创建了一个S3模块。
我面临的问题是,对于某些存储段,我不希望启用日志记录。 如何在terraform中完成。
logging {
target_bucket = "${aws_s3_bucket.log_bucket.id}"
target_prefix = "log/"
}
为target_bucket和target_prefix使用空字符串会导致terraform尝试创建target_bucket。
此外,我正在尝试使用模块。
答案 0 :(得分:1)
可以飞翔。 如果要使日志记录的值可选,请首先将模块aws_s3_bucket.tf设置为:
<p>
然后在子文件夹示例中添加模板 module.tf :
resource "aws_s3_bucket" "b" {
bucket = "my-tf-test-bucket"
acl = "private"
logging = "${var.logging}"
}
variable "logging" {
type = "list"
default = []
}
这是您具有日志记录的版本。
下一步,将您的module.tf修改为
module "s3" {
source = "../"
logging = [
{
target_bucket = "loggingbucketname"
target_prefix = "log/"
},
]
}
provider "aws" {
region = "eu-west-1"
version = "2.4.0"
}
这是您没有的版本。这适用于: Terraform v0.11.11 + provider.aws v2.4.0
答案 1 :(得分:0)
如果要像这样记录日志,请在Terraform 0.12+中使用更新的动态块支持,我们传递包含记录日志设置的单项数组:
variable "logging" {
type = list
default = []
description = "to enable logging set this to [{target_bucket = 'xxx' target_prefix = 'logs/'}]"
}
resource "aws_s3_bucket" "s3bucket" {
dynamic "logging" {
for_each = [for l in var.logging : {
target_bucket = l.target_bucket
target_prefix = l.target_prefix
}]
content {
target_bucket = logging.value.target_bucket
target_prefix = logging.value.target_prefix
}
}
}