我的目录结构
.
├── README.md
├── ec2
│ ├── ec2.tf
│ ├── outputs.tf
│ └── vars.tf
├── main.tf
主.tf
provider "aws" {
region = "us-east-1"
}
module "ec2" {
source = "./ec2"
}
ec2ec2.tf
data "aws_ami" "example" {
most_recent = true
owners = [
"amazon"]
filter {
name = "image-id"
values = [
"ami-0323c3dd2da7fb37d"]
}
filter {
name = "root-device-type"
values = [
"ebs"]
}
filter {
name = "virtualization-type"
values = [
"hvm"]
}
}
resource "aws_instance" "web" {
ami = data.aws_ami.example.id
instance_type = "t2.micro"
subnet_id = var.subnet_id
tags = {
Name = "HelloWorld"
}
}
ec2avrs.tf
variable "subnet_id" {
default = {}
}
当我试图从外部传递subnet_id时,我得到了错误。
terraform plan -var subnet_id=$subnet_name
错误,未声明变量的值 在命令行中分配了一个名为 "subnet_id "的变量,但rootmodule并没有声明这个变量的名字。要使用这个值,需要在配置中添加一个 "变量 "块。
如果你们有谁知道这个问题,请帮助我。
你也需要在你使用模块的根模块中定义变量。在你的例子中,你使用的模块是main.tf,所以在你的模块中添加这个变量,就像这样。
Terraform 12
provider "aws" {
region = "us-east-1"
}
module "ec2" {
source = "./ec2"
subnet_id = var.subnet_id
}
Terraform 11
provider "aws" {
region = "us-east-1"
}
module "ec2" {
source = "./ec2"
subnet_id = "${var.subnet_id}"
}
我在main,tf的相同位置添加了一个vars.tf文件,并添加了空变量,并将其传递给模块。