sar*_*net 8 amazon-web-services terraform terraform-template-file terraform-provider-aws
我有一个terraform运行时失败的文件,terraform plan我收到错误消息:
Error: Cycle: module.hosting.data.template_file.bucket_policy, module.hosting.aws_s3_bucket.website
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为存储桶指的是策略,反之亦然:
data "template_file" "bucket_policy" {
template = file("${path.module}/policy.json")
vars = {
bucket = aws_s3_bucket.website.arn
}
}
resource "aws_s3_bucket" "website" {
bucket = "xxx-website"
website {
index_document = "index.html"
}
policy = data.template_file.bucket_policy.rendered
}
Run Code Online (Sandbox Code Playgroud)
如何避免这种双向引用?
您可以使用该aws_s3_bucket_policy资源。这允许您创建没有循环依赖关系的资源。
这样,Terraform 可以:
代码看起来像这样:
data "template_file" "bucket_policy" {
template = file("${path.module}/policy.json")
vars = {
bucket = aws_s3_bucket.website.arn
}
}
resource "aws_s3_bucket" "website" {
bucket = "xxx-website"
website {
index_document = "index.html"
}
}
resource "aws_s3_bucket_policy" "b" {
bucket = "${aws_s3_bucket.website.id}"
policy = data.template_file.bucket_policy.rendered
}
Run Code Online (Sandbox Code Playgroud)
您可以自己构建存储桶的 ARN:
locals {
bucket_name = "example"
bucket_arn = "arn:aws:s3:::${local.bucket_name}"
}
data "template_file" "bucket_policy" {
template = file("${path.module}/policy.json")
vars = {
bucket = local.bucket_arn
}
}
resource "aws_s3_bucket" "website" {
bucket = local.bucket_name
website {
index_document = "index.html"
}
policy = data.template_file.bucket_policy.rendered
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |