¿Cómo se puede definir una configuración condicional (por ambiente) para un entorno de Elastic Beanstalk con Terraform?
Resultado deseado
Quiero definir condicionalmente un bloque de setting
(configuración) para un recurso de Terraform aws_elastic_beanstalk_environment
basado en otra variable, environment
.
Intento actual
Mi opción habitual para esta situación es utilizar count
:
resource "aws_elastic_beanstalk_environment" "backend_prod" {
name = "backend-${var.env}"
application = aws_elastic_beanstalk_application.backend.name
solution_stack_name = "64bit Amazon Linux 2 v3.4.9 running Docker"
wait_for_ready_timeout = "10m"
# other settings omitted
setting {
count = var.environment == "prod" ? 1 : 0
namespace = "aws:elasticbeanstalk:application:environment"
name = "API_KEY"
value = var.api_key
}
}
Resultado actual
Desafortunadamente, siempre que ejecuto terraform plan
, esto resulta en:
shell
Un argumento llamado "count" no se espera aquí.
davy.ai
Solución
En lugar de usar
count
, podemos usar un bloquedynamic
e incluir condicionalmente el bloquesetting
en base al valor devar.environment
. Aquí está el código actualizado:Esto debería resultar en que el bloque
setting
solo se incluya si el valor devar.environment
es"prod"
. Si es cualquier otra cosa, el bloquesetting
no se incluirá.Tenga en cuenta que estamos usando un bloque
dynamic
con una expresiónfor_each
que incluye una lista de un solo elemento o una lista vacía, dependiendo del valor devar.environment
. Sivar.environment
es"prod"
, el bloquesetting
se incluye una vez. De lo contrario, no se incluirá en absoluto.