未知令牌 IDENT aws_region

Unknown token IDENT aws_region

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

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

不喜欢list(string)。我回到第一个方块并重新编写了整个 Getting Started 教程。它说我可以显式声明 type = list 或者我可以通过省略类型并仅使用 [方括号] 来隐式声明它。

我在这里看到: 我可以使用 "list"(引号),但我找不到关于 list(string) 的任何信息。

所以我注释掉了我的 list(string),这将错误移到了下一部分。

provider "aws" {
  region = var.aws_region
}

本教程指出这是创建区域标签的正确方法(实际上本教程的一部分具有该确切代码)。

任何人都可以帮助我理解 Unknown token IDENT 的含义,因为它贯穿于我的代码中,但它无法帮助我理解我应该如何修复它。

当您执行 terraform 0.12upgrade 并且您的代码语法已经在 Terraform 0.12x 中,或者显然是语法版本 <= 0.11x 和 0.12x 的混合时,会出现此错误。当您在本地计算机(或远程 CI/CD 服务器)上安装的版本为 0.11x 并且您的代码语法为 0.12x 并且您 运行 一个 terraform 命令时,也会发生未知令牌 IDENT 错误作为 terraform init

variable "var1" {
  type = "list"
  ...
} 

这是一个 Terraform 0.11x syntax the alternative 12x 类型 = 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.12升级