如何用字符串插入地形资源引用



在地形中,我创建了一个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-参考

最新更新