【发布时间】:2021-04-04 05:58:46
【问题描述】:
我正在创建一个存储桶来存储 lb 日志。我不想硬编码名称,因为这会导致我的代码由于 s3 的唯一名称要求而中断。我使用的是 terraform 提供的 bucket_prefix。
在存储桶策略中,我需要 s3 存储桶的名称,我的代码如下:
resource "aws_s3_bucket" "aws-s3-lb-logs" {
acl = "private"
force_destroy = true
bucket_prefix = "some-prefix"
policy = <<POLICY
{
"Id": "Policy",
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::${aws_s3_bucket.aws-s3-lb-logs.bucket}/AWSLogs/*",
"Principal": {
"AWS": [
"${data.aws_elb_service_account.main.arn}"
]
}
}
]
}
POLICY
}
当我尝试在策略中调用 ${aws_s3_bucket.aws-s3-lb-logs.bucket} 时,它给出了错误:
Error: Self-referential block
on main.tf line 350, in resource "aws_s3_bucket" "aws-s3-lb-logs":
350: "Resource": "arn:aws:s3:::${aws_s3_bucket.aws-s3-lb-logs.bucket}/AWSLogs/*",
Configuration for aws_s3_bucket.aws-s3-lb-logs may not refer to itself.
我知道我不能调用同一个资源块,但在这种情况下,我如何获取 s3 存储桶的名称以放入策略块中?
【问题讨论】:
标签: amazon-s3 terraform terraform-provider-aws terraform0.12+