首页 > 解决方案 > 错误:模块参数的值无效给定的值不适合子模块变量

问题描述

我收到以下错误:

The given value is not suitable for child module variable "subnets" defined at modules/efs/variables.tf:28,1-19: list of string required.

这就是我调用 EFS 模块的方式:

module "efs_media" {
  source          = "./modules/efs"
  namespace       = "eg"
  stage           = "test"
  name            = var.efs_names[1]
  region          = var.region
  vpc_id          = module.vpc.config.vpc_id
  subnets         = module.vpc.config.private_subnet_ids
  security_groups = [module.cluster.config.node_security_group]
}

以下是 VPC 输出文件:

output "config" {
  value = {
    vpc_id             = aws_vpc.network.id
    public_subnet_ids  = { for az, subnet in aws_subnet.public : az => subnet.id }
    private_subnet_ids = { for az, subnet in aws_subnet.private : az => subnet.id }
  }
}

这是主要的输出文件:

output "vpc_config" {
  value = module.vpc.config
}

output "iam_config" {
  value = module.iam.config
}

output "cluster_config" {
  value = module.cluster.config
}

output "odic_config" {
  value = module.cluster.odic_config
}

标签: amazon-web-servicesterraformterraform-provider-aws

解决方案


在您的模块输出private_subnet_ids中是 : 的az映射subnet.id。您的efs_media模块只需要一个子网 ID 列表,它要求一个字符串列表,如问题中的错误消息所示。

values您可以使用函数将地图转换为其值的列表。所以在你的情况下,你可以这样调用你的efs_media模块:

module "efs_media" {
  source          = "./modules/efs"
  namespace       = "eg"
  stage           = "test"
  name            = var.efs_names[1]
  region          = var.region
  vpc_id          = module.vpc.config.vpc_id
  subnets         = values(module.vpc.config.private_subnet_ids)
  security_groups = [module.cluster.config.node_security_group]
}

推荐阅读