Terraform模块AWS访问键
问题描述:
我使用了以下内容: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"
}
答
我相信你缺少的是使用它们之前声明的变量。我希望这些定义位于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
谢谢 - 是的,这看起来是错误的。但是,我将这些变量定义包含在'root/modules/network/vars.tf'中,但是我仍然得到相同的错误 – GreenyMcDuff
好吧,我想我已经知道了。我之后的行为是一个已知问题https://github.com/hashicorp/terraform/issues/14940。所以我没有在模块中包含提供者模块,而是将它包含在'root/management/network/main.tf'文件中 – GreenyMcDuff