Utilice la misma configuración para varios entornos en Terraform

Utilice la misma configuración para varios entornos en Terraform

Necesito crear varios entornos en AWS usando Terraform. La mayoría de las configuraciones se aplican a todos los entornos. ¿Cómo puedo evitar la duplicación de código?

resource "aws_elastic_beanstalk_application" "app" {
  name = "${var.appName}"
  description = ""
} 

resource "aws_elastic_beanstalk_environment" "app_env" {
  name                = "${var.envName}"
  application         = "${aws_elastic_beanstalk_application.app.name}"
  solution_stack_name = "64bit Amazon Linux 2017.09 v2.8.4 running Multi-container Docker 17.09.1-ce (Generic)"

  #the same for all envs
  setting { 
    namespace = "aws:ec2:vpc"
    name      = "VPCId"
    value     = "vpc-myVpcId"
  },
   #changes for each env
   setting {
        namespace =  "aws:elasticbeanstalk:application:environment",
        name =  "SERVICE_NAME",
        value =  "${var.ServiceName}"
    },

  resource "aws_elastic_beanstalk_application" "app" {
  name = "${var.appName}"
  description = ""
} 

resource "aws_elastic_beanstalk_environment" "app_env_2" {
  name                = "${var.envName}"
  application         = "${aws_elastic_beanstalk_application.app.name}"
  solution_stack_name = "64bit Amazon Linux 2017.09 v2.8.4 running Multi-container Docker 17.09.1-ce (Generic)"

  #the same for all envs
  setting { 
    namespace = "aws:ec2:vpc"
    name      = "VPCId"
    value     = "vpc-myVpcId"
  },
   #changes for each env
   setting {
        namespace =  "aws:elasticbeanstalk:application:environment",
        name =  "SERVICE_NAME",
        value =  "${var.ServiceName_2}"
    },


}  

Respuesta1

Hay dos maneras de hacerlo.

  1. Utilice variables de entorno como se muestra aquí:variables
  2. Utilice un módulo global que proporcione variables predeterminadasmódulos

Ambos tienen pros y contras. Las variables de entorno le brindan la libertad de no escribir más código, pero son específicas del entorno de tiempo de ejecución.

Bueno, los módulos requieren escribir un módulo :)

información relacionada