terraform :尚未声明名为“AMI”的输入变量。可以使用变量“AMI”{} 块声明此变量

sum*_*tty 1 amazon-web-services terraform

我是 terraform 的新手。我正在尝试 terrafrom

我在 var.tfvars 中有这个

variable "AWS_REGION" {    
default = "me-south-1"
}
variable "AMI" {
    type = "map"
    
    default ={
        me-south-1 = "ami-01b735b798*******"
        us-east-1 = "ami-0c2a1acae666******"
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过以下方式在 VPC 中创建一个 ec2

resource "aws_instance" "terraform-web" {
ami = "${lookup(var.AMI, var.AWS_REGION)}"
instance_type = "t3.micro"
Run Code Online (Sandbox Code Playgroud)

这给了我上述错误。

有人能帮我解决这个问题吗?

err*_*404 5

terraform 的工作方式是:

variables.tf -- 所有变量都在这个文件中声明

vars.tfvars——所有值都通过这个文件传递。名称可以是任何东西。应该以 tfvars 结尾。

您不需要使用查找,只需 var.<variable_name> 就足够了!

ec2.tf:

    resource "aws_instance" "terraform-web" {
    ami = var.ami_id
    instance_type = "t3.micro"
}
Run Code Online (Sandbox Code Playgroud)

变量.tf

variable "ami_id" {
    type = "string"
    default = "xxxx"

}
Run Code Online (Sandbox Code Playgroud)

vars.tfvars

ami_id = "yyyyy"
Run Code Online (Sandbox Code Playgroud)

  • 变量可以在目录中的任何“.tf”文件中定义。`variables.tf` 主要是一种约定,以便模块的用户可以在一个地方看到所有可能和必需的输入变量。您还应该提到一些 tfvars 文件是如何自动加载的(例如 `terraform.tfvars`),而其他文件则需要在命令行上指定。 (2认同)