如何使用terraform从VPC获取子网列表

如何使用terraform从VPC获取子网列表,terraform,terraform-provider-aws,aws-batch,Terraform,Terraform Provider Aws,Aws Batch,我已尝试使用以下代码获取所有子网ID,以便使用terraform添加aws批处理: data "aws_subnet_ids" "test_subnet_ids" { vpc_id = "default" } data "aws_subnet" "test_subnet" { count = "${length(data.aws_subnet_ids.test_subnet_ids.ids)}" id = "${tolist(data.aws_subnet_ids.test_s

我已尝试使用以下代码获取所有子网ID,以便使用terraform添加aws批处理:

data "aws_subnet_ids" "test_subnet_ids" {
  vpc_id = "default"
}
data "aws_subnet" "test_subnet" {
  count = "${length(data.aws_subnet_ids.test_subnet_ids.ids)}"
  id    = "${tolist(data.aws_subnet_ids.test_subnet_ids.ids)[count.index]}"
}

output "subnet_cidr_blocks" {
  value = ["${data.aws_subnet.test_subnet.*.id}"]
}
幸运的是,当我进行这样的测试时,它运行良好。但当我尝试与批量地形集成时,如:

resource "aws_batch_compute_environment" "test-qr-processor" {
  compute_environment_name = "test-qr-processor-test"
  compute_resources {
    instance_role = "${aws_iam_instance_profile.test-ec2-role.arn}"
    instance_type = [
      "optimal"
    ]
    max_vcpus = 256
    min_vcpus = 0
    security_group_ids = [
      "${aws_security_group.test-processor-batch.id}"
    ]
    subnets = ["${data.aws_subnet.test_subnet.*.id}"]
    type = "EC2"
  }
  service_role = "${aws_iam_role.test-batch-service-role.arn}"
  type = "MANAGED"
  depends_on = [ "aws_iam_role_policy_attachment.test-batch-service-role" ]
}
我遇到了以下错误消息

错误:属性值类型不正确

在terraform.tf第142行,参考资料中 “aws\u批处理\u计算\u环境”“测试处理器”:142:子网= [“${data.aws_subnet.test_subnet.*.id}”]

属性“子网”的值不正确:元素0:字符串 必需的

请告诉我原因,谢谢。

“${data.aws\u subnet.test\u subnet.*.id}”
已经是
字符串数组类型

您应该输入不带
[]

编写如下代码:

subnets=“${data.aws\u subnet.test\u subnet.*.id}”
见:

以下是关于
资源:aws\u批处理\u计算\u环境的信息


如何筛选出公共子网并仅获取私有子网?@Shell_Leko嗨,你可以在@GNOKOHEAT中找到该文件,该文件已经以顶部的locals变量中分隔的私有子网和公共子网开始。它没有回答Shell_Leko的问题