2017-10-07 90 views
1

我使用了以下內容:Terraform模塊AWS訪問鍵

  • 的Windows 10
  • Visual Studio代碼v1.17.0
  • Terraform v0.10.3
  • AWS

我Terraform非常新穎。我一直在閱讀一系列文章here,這些文章一直很有幫助

當我將AWS訪問密鑰傳遞給我的模塊時,我很掙扎。我有一個非常基本的文件夾結構:

root 
|__terraform.tfvars 
|__management 
    |__network 
     |__main.tf 
     |__vars.tf 
|__modules 
    |__network 
     |__main.tf 
     |__vars.tf 

相關文件的內容在帖子的底部。

root/management/network目錄我已經運行terraform get命令導入模塊。

我然後運行下面的命令,希望一切工作:

terraform plan -var-file="../../terraform.tfvars" -state="../management.tfstate" 

不過,我得到以下錯誤:

Error asking for user input: 1 error(s) occurred: 

* module.mgmt-network.provider.aws: 1:3: unknown variable accessed: 
var.aws_region in: 

${var.aws_region} 

我試圖硬編碼區域,但隨後它只是拋出同樣的錯誤,但對於aws_access_key

實質上,我只是想了解如何可以指定這些變量在我的所有模塊中使用。

根/ terraform.tfvars

aws_access_key = "XXX" 
aws_secret_key = "YYYYYY" 
aws_region  = "eu-west-2" 

根/管理/網絡/ main.tf

module "mgmt-network" { 
    source       = "../../modules/network" 

    network_address_space   = "${var.network_address_space}" 
    enable_dns_hostnames   = true 
    public_subnet_1_address_space = "${var.public_subnet_1_address_space}" 
    map_public_ip_on_launch   = true 
} 

根/模塊/網絡/ main.tf

-- PROVIDER 
provider "aws" { 
    access_key = "${var.aws_access_key}" 
    secret_key = "${var.aws_secret_key}" 
    region  = "${var.aws_region}" 
} 

-- DATA 
data "aws_availability_zones" "availability_zones" {} 

resource "aws_vpc" "vpc" { 
    cidr_block    = "${var.network_address_space}" 
    enable_dns_hostnames = "${var.enable_dns_hostnames}" 
} 

resource "aws_subnet" "public-subnet1" { 
    cidr_block    = "${var.public_subnet_1_address_space}" 
    vpc_id     = "${aws_vpc.vpc.id}" 
    map_public_ip_on_launch = "${var.map_public_ip_on_launch}" 
    availability_zone  = "${data.aws_availability_zones.availability_zones.names[0]}" 
} 

根/模塊/網絡/ vars.tf

variable "aws_access_key" {} 
variable "aws_secret_key" {} 
variable "aws_region" {} 

variable "network_address_space" { 
    description = "cidr block of available ips in the network" 
} 

variable "enable_dns_hostnames" { 
    description = "boolean to enable dns names" 
} 

variable "public_subnet_1_address_space" { 
    description = "cidr block of available ips in the first public subnet" 
} 

variable "map_public_ip_on_launch" { 
    description = "boolean to enable public ips in subnet" 
} 

回答

1

我相信你缺少的是使用它們之前聲明的變量。我希望這些定義位於modules/network和root/management文件夾中的vars.tf文件中。

看起來像這樣:

variable "aws_access_key" { } 
variable "aws_secret_key" { } 
variable "aws_region"  { } 

這裏是我猜是什麼瓦爾variables.tf文件的例子。TF應該是在這個項目:https://github.com/terraform-aws-modules/terraform-aws-vpc/blob/master/variables.tf

和更多細節上的變量:https://www.terraform.io/docs/configuration/variables.html

+0

謝謝 - 是的,這看起來是錯誤的。但是,我將這些變量定義包含在'root/modules/network/vars.tf'中,但是我仍然得到相同的錯誤 – GreenyMcDuff

+0

好吧,我想我已經知道了。我之後的行爲是一個已知問題https://github.com/hashicorp/terraform/issues/14940。所以我沒有在模塊中包含提供者模塊,而是將它包含在'root/management/network/main.tf'文件中 – GreenyMcDuff