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

それには2つの方法があります。

  1. 次に示すように環境変数を使用します。変数
  2. デフォルト変数を提供するグローバルモジュールを使用するモジュール

どちらにも長所と短所があります。Env 変数を使用すると、追加のコードを記述する必要がなくなりますが、実行時の env に固有です。

まあ、モジュールにはモジュールを書く必要があります :)

関連情報