
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.
- Utilice variables de entorno como se muestra aquí:variables
- 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 :)