未知令牌 IDENT aws_region

Eoi*_*oin 7 terraform terraform-provider-aws

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

variable "s3_bucket_name" {
  type = list(string)
  default = [
    "some_bucket_name",
    "other_bucket_name",
    ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

我在这里看到:Unknown token IDENT list error for IP address variable that I can use "list"(quotes) but I can't find any information on list(string).

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

provider "aws" {
  region = var.aws_region
}
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以帮助我理解Unknown token IDENT它在我的代码中的含义,但这并不能帮助我理解我应该做什么来修复它。

Aym*_*gni 19

当您执行terraform 0.12upgrade并且您的代码语法已经在 Terraform 0.12x 或明显混合语法版本 <= 0.11x 和 0.12x时,会出现此错误。当您在本地机器(或远程 CI/CD 服务器)上安装的版本为 0.11x 并且您的代码语法为 0.12x 并且您运行 terraform 命令时,也可能发生 Unknown token IDENT 错误terraform init

variable "var1" {
  type = "list"
  ...
} 
Run Code Online (Sandbox Code Playgroud)

这是 Terraform 0.11x语法,替代12x是 type = list(string)

为了重现您的错误,我有一个 Terraform 代码 0.12x,我执行了terraform 0.12upgrade然后unknown token: IDENT出现了!

总之,我认为您的第一次代码迭代已经采用正确的语法,因此无需升级。为避免此类错误,您可以version.tf在代码中添加一个包含以下内容的新文件:

terraform {
  required_version = ">= 0.12"
}
Run Code Online (Sandbox Code Playgroud)

升级提示:

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

  • `$ terraform version` : 打印 Terraform 版本 (2认同)