2017-10-10 188 views
1

在三种不同的环境下,我希望能够根据环境动态设置变量。在我下面的例子中,假设dev和prod的实例类型不同。我无法在模块中引用instance_type,除非我的vars.tf文件与我的terraform.tfvars并列。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-刺/服务/阿波罗/ 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