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.

Crear etapa opcional en módulo de Terraform en CodePipeline.

He creado un módulo de TF para implementar un CodePipeline.

Se ve así:

Recurso “aws_codepipeline” “test_pipeline” {
name = “${var.name}-codepipeline”
role_arn = aws_iam_role.codepipeline_service_role.arn

artifact_store {
location = var.artifact_bucket_name
type = “S3”
}

stage {
name = “Source”

action {
...
}

}

stage {
name = “Non-Prod Deploy”
count = “${var.non_prod_environment == true ? 1 : 0}”

action {
  ...
  }
}

}

stage {
name = “Prod Deploy”

action {
  ...
  }
}

}

Estoy intentando crear una etapa opcional dentro de mi pipeline. Intenté usar “count” pero obtengo:

│ No se espera un argumento llamado “count” aquí.

Probablemente porque no es un recurso separado. ¿Cómo puedo lograr que una etapa (parte de un recurso) sea opcional?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que un recurso de CodePipeline sea opcional, puedes utilizar el argumento for_each en lugar de count.

    Aquí tienes una versión actualizada del código de ejemplo:

    recurso "aws_codepipeline" "test_pipeline" {
      nombre   = "${var.name}-codepipeline"
      role_arn = aws_iam_role.codepipeline_service_role.arn
    
      almacenamiento_artifactos {
        ubicacion = var.artifact_bucket_name
        tipo      = "S3"
      }
    
       etapa {
          nombre = "Origen"
    
          acción {
            # ...
          }
       }
    
       # La etapa de implementación de Non-Prod es opcional
       dynamic "etapa" {
          for_each = var.non_prod_environment == true ? [1] : []
          contenido {
             nombre  = "Implementación Non-Prod"
    
              acción {
               # ...
             }
          }
       }
    
        etapa {   
           nombre = "Implementación Prod"
    
           acción {
             # ...
           }
        }
    }
    

    En esta versión, el bloque etapa para “Implementación Non-Prod” está envuelto en un bloque dynamic. El argumento for_each se configura como una lista que contiene 1 elemento (el número 1) cuando la variable var.non_prod_environment se establece como verdadera, y una lista vacía en caso contrario.

    El uso de for_each con un bloque dinámico te permite crear bloques de configuración repetibles dentro de un recurso, sin que se genere un error de sintaxis si la lista está vacía o es inválida.

    De esta manera, si var.non_prod_environment es verdadera, Terraform creará un bloque etapa con el nombre “Implementación Non-Prod” y el bloque acción asociado. Si var.non_prod_environment es falsa, el bloque etapa no se creará en absoluto.

    ¡Espero que esto te ayude!

Comments are closed.