2017-10-10 3 views
1

3つの異なる環境では、環境に基づいて変数を動的に設定できます。以下の私の例では、インスタンスの型がdevとprodの間で異なっているとしましょう。私はをterraform.tfvarsの横にvars.tfというファイルがない限り参照できません。Terraform - モジュールでtfvarsを使用する方法

私が手にエラーがある:

unknown variable referenced: 'instance_type'. define it with 'variable' blocks

そのような場合、このファイルはmodules/apollo/vars.tfの下にまったく同じファイルではないでしょうか?

私はmodules/apollo/vars.tfがモジュールに必要な必要な変数を定義していると思いました。私はそれがenv-dev/services/apollo/の下の "根"レベルの中で必要とは思わなかった。これを行う "より良い"方法があれば、私はすべての耳です。

├── env-dev 
│   └── services 
│    └── apollo 
│     ├── main.tf 
│     ├── terraform.tfvars  
│     └── vars.tf # Do i need this? 
├── env-test 
├── global 
├── mgmt 
└── modules 
    ├── apollo 
    │   ├── main.tf 
    │   ├── user_data.tpl 
    │   └── vars.tf 
    └── defaults 
     └── main.tf 

ENV-DEV /サービス/アポロ/ terraform.tfvars

instance_type = "t2.medium" 

ENV-PROD /サービス/アポロ/ terraform.tfvars

instance_type = "t2.large" 

モジュール/アポロ/ vars.tf

variable "instance_type" { 
    description = "EC2 Instance Type" 
} 

modules/apollo/main.tf

resource "aws_instance" "instance" {  
    ... 
    instance_type   = "${var.instance_type}" 
    ... 
} 

答えて

1

構造を調整します。これはアプリケーションの理解です。

├── dev 
│ └── apollo_terraform.tfvars  
├── test 
│ └── apollo_terraform.tfvars 
├── global 
│ └── apollo_terraform.tfvars 
├── mgmt 
│ └── apollo_terraform.tfvars 
├── main.tf, vars.tf, output.tf, apollo.tf, default.tf, etc 
└── modules 
    ├── apollo 
    │ ├── main.tf 
    │ ├── user_data.tpl 
    │ └── vars.tf 
    └── defaults 
     └── main.tf 
apollo.tf

共有モジュールapolloを使用するソースモジュールコードを有することになります。 default.tf

あなたの計画/ applyコマンドのための同じ設定は次のようにする必要があります:

terraform plan -var-file=${env}/apollo_terraform.tfvars 
関連する問題