2017-10-07 89 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