【发布时间】:2019-07-31 07:54:31
【问题描述】:
我正在将我的 terraform 0.11 配置迁移到 terraform 0.12.5。
迁移(使用0.12upgrade)比较顺利,但是在接下来的计划中遇到了这个错误
Error: Invalid value for module argument
on main.tf line 72, in module "foo":
72: subnet_ids = module.vpc.subnet_ids
The given value is not suitable for child module variable "subnet_ids"
defined at ../../modules/foo/main.tf:10,1-30: element 0: string
required.
模块foo 有一个(迁移的)变量声明subnet_ids,如下所示:
variable "subnet_ids" {
type = list(string)
}
而vpc 模块有一个输出声明,声明如下:
output "subnet_ids" {
value = [aws_subnet.private.*.id]
}
看来,如果我放宽 foo 模块的类型约束,错误就会消失。
但是,这是正确的做法吗?毕竟,vpc 模块的输出实际上不就是一个字符串列表吗?如何查看 vpc 输出变量的类型?
更新:放宽类型约束允许验证的第一部分成功,但当根据此输出应用变量时,只会导致消费模块出现问题
Error: Incorrect attribute value type
on ../../modules/foo/main.tf line 350, in resource "aws_ecs_service" "api":
350: subnets = var.subnet_ids
Inappropriate value for attribute "subnets": incorrect set element type:
string required.
所以问题是:我在定义输出值时做错了什么?如何确保输出值是字符串列表,这样我就不会收到原始错误?如何检查vpc.subnet_ids的类型?
【问题讨论】: