Terraform의 여러 환경에 동일한 설정 사용

Terraform의 여러 환경에 동일한 설정 사용

Terraform을 사용하여 AWS에서 여러 환경을 구축해야 합니다. 대부분의 설정은 모든 환경에 적용됩니다. 코드 중복을 방지하려면 어떻게 해야 합니까?

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

이를 수행하는 방법에는 두 가지가 있습니다.

  1. 여기에 표시된 대로 환경 변수를 사용하십시오.변수
  2. 기본 변수를 제공하는 전역 모듈을 사용하세요.모듈

둘 다 장단점이 있습니다. Env vars는 더 많은 코드를 작성하지 않아도 되는 자유를 제공하지만 런타임 환경에 따라 다릅니다.

음, 모듈을 작성하려면 모듈을 작성해야 합니다 :)

관련 정보