es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo identificar una referencia circular en Terraform?

Escenario

Tengo un problema donde un módulo Terraform ha definido la cola SQS y su política internamente, pero obtengo el siguiente error al intentar ejecutar el comando terraform plan, apply e incluso refresh. ¿Por qué?

Error


El valor de "count" depende de los atributos de recursos que no se pueden determinar hasta el momento de la aplicación, por lo que Terraform no puede predecir cuántas instancias se crearán. Para solucionarlo, utiliza el argumento -target.

Código del usuario


module "my_sqsqueue" {
source = "[redactado]"
sqs_name = "${local.some_name}"
sqs_policy = <<EOF
{
"Version": "2012-10-17",
"Id": "my_policy",
"Statement": [
{
"Sid": "111",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sqs:SendMessage",
"Resource": "${module.my_sqsqueue.sqs_queue_arn}",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "[redactado]"
}
}
}
]
}
EOF
}

Definición del módulo

resource "aws<em>sqs</em>queue<em>policy" "main</em>queue<em>policy" {
  count = var.sqs</em>policy != "" ? 1 : 0

queue<em>url = aws</em>sqs<em>queue.main</em>queue.id
  policy    = var.sqs_policy
}

resource "aws<em>sqs</em>queue" "main<em>queue" {
  content</em>based<em>deduplication       = var.sqs</em>content<em>based</em>deduplication
  delay<em>seconds                     = var.sqs</em>delay<em>seconds
  fifo</em>queue                        = var.sqs<em>fifo</em>queue
  kms<em>data</em>key<em>reuse</em>period<em>seconds = var.sqs</em>kms<em>data</em>key<em>reuse</em>period<em>seconds
  kms</em>master<em>key</em>id                 = var.sqs<em>kms</em>master<em>key</em>id
  max<em>message</em>size                  = var.sqs<em>max</em>message<em>size
  message</em>retention<em>seconds         = var.sqs</em>message<em>retention</em>seconds
  name                              = var.sqs<em>name
  receive</em>wait<em>time</em>seconds         = var.sqs<em>receive</em>wait<em>time</em>seconds
  visibility<em>timeout</em>seconds        = var.sqs<em>visibility</em>timeout_seconds

tags = merge(
    {
      Name = var.sqs<em>name
    },
    local.default</em>tag_map
  )
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay una dependencia circular en el módulo Terraform, específicamente relacionada con el valor count del recurso aws_sqs_queue_policy. El valor count depende de un atributo del recurso que no se puede determinar hasta aplicar, lo que impide que Terraform pueda predecir el número de instancias que se crearán. Como resultado, esta dependencia circular hace que Terraform falle al ejecutar plan, apply o refresh.

    Para resolver la dependencia circular, puedes utilizar el argumento -target para especificar explícitamente el orden en el que se crean los recursos. Alternativamente, podrías mover la definición de la política SQS a un módulo separado, que no tendría una dependencia circular con el recurso aws_sqs_queue.

Comments are closed.