2017-10-10 60 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