适用于S3存储桶的Terraform AWS可选日志记录

时间:2019-04-02 15:24:32

标签: amazon-s3 terraform terraform-provider-aws

我正尝试使用链接中示例中的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。

此外,我正在尝试使用模块。

2 个答案:

答案 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
    }
  }
}