
Preciso construir vários ambientes na AWS usando Terraform. A maioria das configurações se aplica a todos os ambientes – como posso evitar a duplicação 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}"
},
}
Responder1
Existem duas maneiras de fazer isso.
- Use variáveis de ambiente conforme mostrado aqui:variáveis
- Use um módulo global que forneça variáveis padrãomódulos
Ambos têm seus prós e contras. Env vars, dão a você a liberdade de não escrever mais código, mas são específicos do ambiente de tempo de execução.
Bem, módulos, é necessário escrever um módulo :)