Terraform 地形输出';错误:不允许使用变量';做计划的时候

Terraform 地形输出';错误:不允许使用变量';做计划的时候,terraform,Terraform,我在我的variables.tf中声明了一个变量,如下所示: variable "MyAmi" { type = map(string) } 但当我这样做的时候: terraform plan -var 'MyAmi=xxxx' 我得到: Error: Variables not allowed on <value for var.MyAmi> line 1: (source code not available) Variables may not be use

我在我的
variables.tf中声明了一个变量,如下所示:

variable "MyAmi" {
  type = map(string)
}
但当我这样做的时候:

terraform plan -var 'MyAmi=xxxx'
我得到:

Error: Variables not allowed

  on <value for var.MyAmi> line 1:
  (source code not available)

Variables may not be used here.
变量.tf

variable "MyAmi" {
  type = map(string)
}
terraform平面图-var'MyAmi=test'

Error: Variables not allowed

  on <value for var.MyAmi> line 1:
  (source code not available)

Variables may not be used here.
错误:不允许使用变量
第1行:
(源代码不可用)
这里不能使用变量。

有什么建议吗?

我发现两件事可能会导致您看到的错误。链接到
地形平面图

  • 运行
    terraform plan
    时,它将自动加载当前目录中的任何
    .tfvars
    文件。如果
    .tfvars
    文件位于另一个目录中,则必须将其作为
    -var文件
    参数提供。您在问题中说您的变量位于文件
    variables.tf
    中,这意味着
    terraform plan
    命令不会自动加载该文件。修复:将
    variables.tf
    重命名为
    variables.tfvars

  • 当使用
    -var
    参数时,您应该确保传递给它的内容将由HCL正确解释。如果您试图传递的变量是一个映射,那么它需要能够作为映射进行解析

  • 而不是
    terraformplan-var'MyAmi=xxxx'
    我希望类似
    terraformplan-var'MyAmi={“us-east-1”:“ami-123”,“us-east-2”:“ami-456”}'


    有关声明变量和通过命令行专门传递变量的详细信息,请参见本节。

    当尝试从动态资源(例如:子模块的输出)设置变量值时,也会发生此错误:


    你能在一个我们可以运行并看到相同错误的环境中重新创建它吗?看起来您丢失了引发错误的位,或者解析器只是在某个地方掉到了堆中。是的,是映射变量导致了问题。这不起作用,我仍然收到“此处不允许使用变量”我认为这个答案是不完整的,因为我在执行
    foo=local时仍然得到了这里不允许的
    变量。在
    .tfvars
    文件中有一些\u arn>@MarcelloRomani提到的文件是variables.tf,而不是.tfvars。
    Error: Variables not allowed
    
      on <value for var.MyAmi> line 1:
      (source code not available)
    
    Variables may not be used here.
    
    variable  "some_arn" {
      description = "Some description"
      default     = module.some_module.some_output # <--- Error: Variables not allowed
    }
    
    locals {
      some_arn = module.some_module.some_output
    }