未知标识符 IDENT aws_region。

16

我刚刚运行了Terraform的升级程序。我的代码已经被更新了,但现在显示出一些错误。第一个错误是:

variable "s3_bucket_name" {
  type = list(string)
  default = [
    "some_bucket_name",
    "other_bucket_name",
    ...
  ]
}

它不喜欢 list(string)。我回到起点,重新做了整个入门教程。它说我可以明确声明type = list,也可以通过省略类型并仅使用[方括号]来隐式声明。

我在这里看到: 未知标记IDENT列表错误的IP地址变量,我可以使用"list"(引号),但我找不到任何关于list(string)的信息。

因此,我注释掉了我的list(string),这将错误移动到下一个部分。

provider "aws" {
  region = var.aws_region
}

这个教程指出这是创建区域标记的正确方法(实际上教程中有具有精确代码的部分)。

有人能帮我理解“未知令牌IDENT”的含义吗?因为它在我的代码中频繁出现,但并没有帮助我理解我应该如何修复它。


1
你使用的是哪个版本的Terraform?那是在Terraform 0.12中引入的HCL2语法。 - ydaetskcoR
我该如何检查版本? - Eoin
2个回答

30
当您执行terraform 0.12upgrade时,如果您的代码语法已经在Terraform 0.12x中或者明显是语法版本<=0.11x和0.12x的混合体,则会出现此错误。同时,如果您本地安装的版本为0.11x,而您的代码语法为0.12x,并且运行了如terraform init之类的terraform命令,则可能会出现未知标记IDENT错误。
variable "var1" {
  type = "list"
  ...
} 

这是一个Terraform 0.11x的语法,其替代方案12x为type = list(string)。
要重现您的错误,我有一个Terraform代码0.12x,我执行了terraform 0.12upgrade,然后出现了unknown token: IDENT
总之,我认为您的第一次代码迭代已经是正确的语法,所以没有必要升级。 为了避免这种错误,您可以在您的代码中添加一个新的version.tf文件,并添加以下内容:
terraform {
  required_version = ">= 0.12"
}

升级提示:

  1. 不要在同一个Terraform代码中混合使用语法,如果这样做,请手动将您的代码降级到0.11x。
  2. 将所有Terraform代码语法放置在0.11x中。
  3. 然后运行:terraform 0.12upgrade

欢迎加入社区,感谢您的回答。 - Eoin
有没有办法知道我正在运行哪个版本的Terraform?如果这是一个愚蠢的问题,对不起,我真的很新。 - Eoin
2
$ terraform version: 打印 Terraform 版本 - Aymen Segni

2

Terraform 版本:0.11.14

我还得修复代码。

已更改

data.terraform_remote_state.vpc.main_vpc_id

"${data.terraform_remote_state.vpc.main_vpc_id}"


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