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

PPS*_*ein 5 terraform aws-batch terraform-provider-aws

我尝试使用以下代码获取所有子网 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}"]
}
Run Code Online (Sandbox Code Playgroud)

幸运的是,当我这样测试时它运行良好。但是当我尝试与批处理 terraform 集成时,例如:

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" ]
}
Run Code Online (Sandbox Code Playgroud)

我遇到了以下错误消息,

错误:属性值类型不正确

在 terraform.tf 第 142 行,在资源“aws_batch_compute_environment”“test-processor”中:142:子网 = [“${data.aws_subnet.test_subnet.*.id}”]

属性“子网”的不适当值:元素 0:需要字符串。

请告诉我原因,谢谢。

GNO*_*EAT 7

"${data.aws_subnet.test_subnet.*.id}"已经string array输入。

你应该输入值而不 [ ]

编写代码如下:

subnets = "${data.aws_subnet.test_subnet.*.id}"
Run Code Online (Sandbox Code Playgroud)

看 :

这是一份关于Resource: aws_batch_compute_environment

  • @GNOKOHEAT 该文件已经以在顶部的 locals 变量中分隔的私有子网和公共子网开头。它没有回答 Shell_Leko 的问题 (3认同)
  • 如何过滤掉公共子网并仅获取私有子网? (2认同)