在地形中,我创建了一个S3 bucket,如下所示:
resource "aws_s3_bucket" "test_bucket" {
bucket = "my-test-bucket"
}
在地形中,我已经声明了这样的iam策略资源(顺便说一句,这是我错的地方(:
resources = ["aws_s3_bucket.test_bucket.arn/AWSLogs/${var.account_id}/*"]
Terraform计划,正确显示:
+ Resource = "aws_s3_bucket.test_bucket.arn/AWSLogs/123456789101/*"
如何获取地形图来显示/插入/构建以下字符串?:
+ Resource = "arn:aws:s3:::my-test-bucket/AWSLogs/123456789101/*"
由于您已经看到这个的输出:
resources = ["aws_s3_bucket.test_bucket.arn/AWSLogs/${var.account_id}/*"]
是:
+ Resource = "aws_s3_bucket.test_bucket.arn/AWSLogs/123456789101/*"
应该得出的结论是,这是一个字符串文字。换句话说,Terraform将其视为一个常规字符串。既然你有这个:
resource "aws_s3_bucket" "test_bucket" {
bucket = "my-test-bucket"
}
构造所需字符串的方法是使用正确的插值:
"${aws_s3_bucket.test_bucket.arn}/AWSLogs/123456789101/*"
确保您了解如何访问资源提供的属性和参数[1]。在您的案例中,您正在寻找S3资源[2]导出的属性。
[1]https://developer.hashicorp.com/terraform/language/expressions/references
[2]https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket#attributes-参考