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

5
我是新手,正在尝试使用terraform。
我在var.tfvars中有以下代码。
variable "AWS_REGION" {    
default = "me-south-1"
}
variable "AMI" {
    type = "map"
    
    default ={
        me-south-1 = "ami-01b735b798*******"
        us-east-1 = "ami-0c2a1acae666******"
    }
}

我正在尝试通过创建一个VPC中的EC2来实现

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

我遇到了上述错误,请问有人能帮我吗?

1个回答

10

terraform的工作原理是:

variables.tf-在此文件中声明所有变量

vars.tfvars-通过此文件传递所有值。名称可以是任何内容,但应以tfvars结尾。

您不需要使用lookup,只需var.<variable_name>即可!

ec2.tf:

    resource "aws_instance" "terraform-web" {
    ami = var.ami_id
    instance_type = "t3.micro"
}

variables.tf

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

}

vars.tfvars

ami_id = "yyyyy"

3
变量可以在目录中的任何.tf文件中定义。 variables.tf通常是一个惯例,以便模块的用户可以在一个地方查看所有可能和必需的输入变量。您还应提及某些tfvars文件如何自动加载(例如terraform.tfvars),而另一些则需要在命令行上指定。 - ydaetskcoR
1
如果你看其数据类型,查找点也是不正确的。但是,你不应该像在0.7之前(早在2016年)一样使用老式地图查找,而是应该鼓励使用aws_ami(可能也包括aws_region)数据源。 - ydaetskcoR
@ydaetskcoR 我应该如何实现这种新方式? - sumanth shetty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接