我刚刚运行了Terraform升级。 我的代码已更新,但现在它显示一些错误。 第一个是:
variable "s3_bucket_name" {
type = list(string)
default = [
"some_bucket_name",
"other_bucket_name",
...
]
}
它不喜欢list(string)
. 我回到了原点,重做了整个入门教程。 它说我可以明确说明type = list
或者我可以通过省略类型并仅使用[方括号]来隐含地陈述它。
我在这里看到:IP地址变量的未知令牌识别列表错误,我可以"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 命令(如terraform init
variable "var1" {
type = "list"
...
}
这是一个大地 0.11x 语法,替代 12x 是类型 = list(字符串(
为了重现您的错误,我有一个 Terraform 代码 0.12x,我执行了terraform 0.12upgrade
然后unknown token: IDENT
出现了!
总之,我认为您的第一次代码迭代已经使用了正确的语法,因此无需升级。 若要避免此类错误,可以在代码中使用以下内容添加新的version.tf
文件:
terraform {
required_version = ">= 0.12"
}
升级提示:
- 不要在同一 Terraform 代码中混合语法,如果是这样,请手动将代码降级到 0.11x
- 将所有 Terraform 代码语法转换为 0.11x
- 然后运行:地形 0.12升级
地形版本:0.11.14
我也必须修复代码。
改变
data.terraform_remote_state.vpc.main_vpc_id
自
"${data.terraform_remote_state.vpc.main_vpc_id}"