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?
davy.ai
Para hacer que un recurso de CodePipeline sea opcional, puedes utilizar el argumento
for_each
en lugar decount
.Aquí tienes una versión actualizada del código de ejemplo:
En esta versión, el bloque
etapa
para “Implementación Non-Prod” está envuelto en un bloquedynamic
. El argumentofor_each
se configura como una lista que contiene 1 elemento (el número1
) cuando la variablevar.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 bloqueetapa
con el nombre “Implementación Non-Prod” y el bloqueacción
asociado. Sivar.non_prod_environment
es falsa, el bloqueetapa
no se creará en absoluto.¡Espero que esto te ayude!