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.

Plan de Terraform que muestra los cambios que ya están aplicados.

Tengo un pipeline que crea usuarios en RabbitMQ, Minio, Keycloak y otras aplicaciones usando Terraform, pero en Minio tengo un problema. Cuando ejecuto Terraform por primera vez, el pipeline crea el bucket, la política y el usuario (hasta aquí, todo bien), pero cuando lo ejecuto en otras ocasiones, el plan de Terraform muestra cambios que no existen, porque ya ejecuté el pipeline y no hay ningún cambio, como muestra la imagen:

enter image description here

A continuación, mi código de Terraform para Minio:

# Crear un bucket.
resource "minio_bucket" "bucket" {
  name = var.namespace
}

resource "minio_user" "user1" {
  access_key = var.namespace
  secret_key = var.password
  policies = [
    minio_canned_policy.policy1.name
    # Nota: ¡usando un origen de datos aquí!
    #data.minio_canned_policy.console_admin.name,
  ]
  /*groups = [
    minio_group.group2.name,
  ]*/
  depends_on = [
    minio_canned_policy.policy1,
  ]
}

# Crear una política.
resource "minio_canned_policy" "policy1" {
  name   = "policy1"
  policy = <<eot
{
    "version": "2012-10-17",
    "statement": [
        {
            "effect": "allow",
            "action": [
                "s3:getbucketlocation",
                "s3:listallmybuckets"
            ],
            "resource": "arn:aws:s3:::${minio_bucket.bucket.name}*"
        },
        {
            "effect": "allow",
            "action": ["s3:listbucket"],
            "resource": ["arn:aws:s3:::${minio_bucket.bucket.name}"]
        },
        {
            "effect": "allow",
            "action": [
                "s3:putobject",
                "s3:getobject",
                "s3:deleteobject"
            ],
            "resource": ["arn:aws:s3:::${minio_bucket.bucket.name}/*"]
        }
    ]
}
eot
}

en rabbitmq, keycloak, por ejemplo, todo funciona bien.

¿alguien tiene alguna idea para resolver esto?

¡gracias! {=”” “version”:=”” “2012-10-17″,=”” “statement”:=”” [=”” {=”” “effect”:=”” “allow”,=”” “action”:=”” [=”” “s3:getbucketlocation”,=”” “s3:listallmybuckets”=”” ],=”” “resource”:=”” “arn:aws:s3:::${minio_bucket.bucket.name}“=”” },=”” {=”” “effect”:=”” “allow”,=”” “action”:=”” [“s3:listbucket”],=”” “resource”:=”” [“arn:aws:s3:::${minio_bucket.bucket.name}”]=”” },=”” {=”” “effect”:=”” “allow”,=”” “action”:=”” [=”” “s3:putobject”,=”” “s3:getobject”,=”” “s3:deleteobject”=”” ],=”” “resource”:=”” [“arn:aws:s3:::${minio_bucket.bucket.name}/“]=”” }=”” ]=”” }=”” eot=”” }=”” ="" en="" rabbitmq,="" keycloak,="" por="" ejemplo,="" todo="" funciona="" bien.="" ¿alguien="" tiene="" alguna="" idea="" para="" resolver="" esto?=""></eot
{
"version": "2012-10-17",
"statement": [
{
"effect": "allow",
"action": [
"s3:getbucketlocation",
"s3:listallmybuckets"
],
"resource": "arn:aws:s3:::${minio_bucket.bucket.name}*"
},
{
"effect": "allow",
"action": ["s3:listbucket"],
"resource": ["arn:aws:s3:::${minio_bucket.bucket.name}"]
},
{
"effect": "allow",
"action": [
"s3:putobject",
"s3:getobject",
"s3:deleteobject"
],
"resource": ["arn:aws:s3:::${minio_bucket.bucket.name}/*"]
}
]
}
eot
}

en rabbitmq, keycloak, por ejemplo, todo funciona bien.

¿alguien tiene alguna idea para resolver esto?

¡gracias!>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el estado de terraform. Cuando ejecutas el pipeline nuevamente, terraform detecta cambios ya que no tiene conocimiento del estado anterior.

    Puedes intentar configurar un backend para el estado de terraform, como remote state, que almacenará el estado en una ubicación centralizada. Esto asegurará que terraform tenga un registro del estado anterior y pueda detectar con precisión los cambios.

    Para configurar el remote state, puedes usar una herramienta como S3 o Consul. Aquí tienes un ejemplo de cómo usar S3 para el remote state:

    terraform {
      backend "s3" {
        bucket = "mi-terraform-state"
        key    = "terraform.tfstate"
        region = "us-east-1"
      }
    }
    

    Además, puedes intentar usar el comando terraform refresh antes de ejecutar terraform plan para asegurarte de que terraform tenga información actualizada sobre el estado actual de tu infraestructura.

    Esperemos que al configurar el remote state o utilizar terraform refresh se resuelva tu problema de detectar cambios innecesarios en Minio.

Comments are closed.