【问题标题】:terraform :An input variable with the name "AMI" has not been declared. This variable can be declared with a variable "AMI" {} blockterraform :尚未声明名为“AMI”的输入变量。这个变量可以用变量“AMI”{}块声明
【发布时间】:2020-07-02 13:35:57
【问题描述】:

我是 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******"
    }
}

我正在尝试通过

在 VPC 中创建一个 ec2
resource "aws_instance" "terraform-web" {
ami = "${lookup(var.AMI, var.AWS_REGION)}"
instance_type = "t3.micro"

这给了我上述错误。

谁能帮我解决这个问题?

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    terraform 的工作方式是:

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

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

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

    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"
    

    【讨论】:

    • 变量可以在目录中的任何.tf文件中定义。 variables.tf 主要是一种约定,以便模块的用户可以在一个地方查看所有可能和必需的输入变量。您还应该提到一些 tfvars 文件是如何自动加载的(例如terraform.tfvars),而其他文件需要在命令行中指定。
    • 如果您查看它们的数据类型,查找点也是不正确的。但是,与其像在 0.7 之前(早在 2016 年!)那样进行老式地图查找,不如鼓励使用 aws_ami(也可能是 aws_region)数据源。
    • @ydaetskcoR 我将如何实施新方法?
    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 2021-01-15
    • 2021-07-04
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多