Назад | Перейти на главную страницу

Используйте одинаковые настройки для нескольких сред в терраформе.

Мне нужно создать несколько сред на AWS с помощью Terraform. Большинство настроек применимы ко всем средам - ​​как избежать дублирования кода?

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}"
    },


}  

Это можно сделать двумя способами.

  1. Используйте переменные среды, как показано здесь: переменные
  2. Используйте глобальный модуль, который предоставляет переменные по умолчанию модули

У обоих есть свои плюсы и минусы. Env vars, дают вам свободу не писать больше кода, но зависят от среды выполнения env.

Ну, модули, нужно написать модуль :)