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 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í.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    En lugar de usar count, podemos usar un bloque dynamic e incluir condicionalmente el bloque setting en base al valor de var.environment. Aquí está el código actualizado:

    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"
    
      # otros ajustes omitidos
    
      dynamic "setting" {
        for_each = var.environment == "prod" ? [1] : []
        content {
          namespace = "aws:elasticbeanstalk:application:environment"
          name      = "API_KEY"
          value     = var.api_key
        }
      }
    }
    

    Esto debería resultar en que el bloque setting solo se incluya si el valor de var.environment es "prod". Si es cualquier otra cosa, el bloque setting no se incluirá.

    Tenga en cuenta que estamos usando un bloque dynamic con una expresión for_each que incluye una lista de un solo elemento o una lista vacía, dependiendo del valor de var.environment. Si var.environment es "prod", el bloque setting se incluye una vez. De lo contrario, no se incluirá en absoluto.

Comments are closed.