Tengo un archivo de terraform que falla cuando ejecuto el terraform plan y aparece el error:
Error: Cycle: module.hosting.data.template_file.bucket_policy, module.hosting.aws_s3_bucket.websiteTiene sentido ya que el cubo se refiere a la política y viceversa:
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 }¿Cómo puedo evitar esta referencia bidireccional?
Puede utilizar el recurso aws_s3_bucket_policy . Esto le permite crear los recursos sin una dependencia circular.
De esta forma, Terraform puede:
El código sería algo como esto:
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 }Podrías construir el ARN del depósito tú mismo:
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 }