尝试将日志记录添加到两个存储桶时,我的 Terraform 脚本中出现错误。这些是我的一个模块的一部分,我以前已经成功使用过它们。我回来部署一个新环境...现在它不起作用。
我收到以下错误:
module.dev2_environment.module.portal.aws_s3_bucket.portal_bucket:发生 1 个错误: * aws_s3_bucket.portal_bucket:输入 S3 日志记录时出错:InvalidTargetBucketForLogging:您必须提供日志传输组 对目标存储桶的写入和READ_ACP权限 状态代码: 400, 请求 ID: 51AB42EFCACC9924, 主机 ID: nYCUxjHZE+xTisA1xG5syLTKVN/Rtwu8z3xF+O9GAPMdC2yGcafP4uwDURUGKd9Lx1SD8aHTcEI=
我正在使用管理员凭据通过 CLI 执行。在工作状态和错误之间未进行任何代码更改。关于什么可以改变的任何想法?语法?AWS 配置在某个地方?
Terraform 11.14 和 AWS 提供商 2.16
日志桶:
resource "aws_s3_bucket" "logs_bucket" {
bucket = "XYZ-${var.env}-cdnlogs"
acl = "log-delivery-write"
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
tags {
Finance = "dev_env"
Environment = "${var.env}"
}
}
目标存储桶:
resource "aws_s3_bucket" "portal_bucket" {
bucket = "XYZ-${var.env}-portal"
acl = "private"
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
logging {
target_bucket = "${aws_s3_bucket.logs_bucket.id}"
target_prefix = "logs/portal/"
}
website {
index_document = "index.html"
error_document = "index.html"
}
// Needed to allow logos to be uploaded the "Portal"
cors_rule {
allowed_headers = ["*"]
allowed_methods = ["GET", "HEAD", "PUT", "POST"]
allowed_origins = ["*"]
max_age_seconds = 3000
}
tags {
Finance = "dev_env"
Environment = "${var.env}"
}
}
设置log-delivery-write
ACL 的值以允许日志记录 -> 读取和日志记录写入。以及读取存储桶权限。
我认为错误就在这里logging {
target_bucket = "${aws_s3_bucket.**logs_bucket**.id}"
target_prefix = "logs/portal/"
}
它应该是logging {
**target_bucket = "${aws_s3_bucket.portal_bucket.id}"**
target_prefix = "logs/portal/"
}
aws_s3_bucket
的logging
参数已被弃用。从文档中:
日志记录属性已弃用。有关启用日志记录的示例,请参阅aws_s3_bucket_logging。
新资源s3_bucket_logging:
resource "aws_s3_bucket_logging" "some-name" {
bucket = aws_s3_bucket.my_bucket.id
target_bucket = "log_destination_bucket"
target_prefix = aws_s3_bucket.my_bucket.id
}
在我的设置中,我有一个存储桶来存储我所有 bucekts 的服务器访问日志,并且我在target_prefix
中使用源存储桶的名称来保持日志在子文件夹中组织。