Amazon web services Terraform:如何从VPC id获取VPC CIDR?

Amazon web services Terraform:如何从VPC id获取VPC CIDR?,amazon-web-services,amazon-ec2,terraform,Amazon Web Services,Amazon Ec2,Terraform,我正在尝试为给定VPC获取PIV4\u CIDR,使用aws\u vpcs数据源首先识别VPC并从ID获取CIDR-可能吗 只是一点背景,出于某些设计原因,我们在不同的VPC中提供服务。例如,我有三个VPC:xxxprod-n、xxxprod-l和xxxprod-h,我想为整个子网添加一个SG规则,以允许访问特定端口。这就是我所尝试的: data "aws_vpcs" "prod" { tags = { Name = "${var.project}prd-*" } } reso

我正在尝试为给定VPC获取PIV4\u CIDR,使用aws\u vpcs数据源首先识别VPC并从ID获取CIDR-可能吗

只是一点背景,出于某些设计原因,我们在不同的VPC中提供服务。例如,我有三个VPC:
xxxprod-n
xxxprod-l
xxxprod-h
,我想为整个子网添加一个SG规则,以允许访问特定端口。这就是我所尝试的:

data "aws_vpcs" "prod" {
  tags = {
    Name = "${var.project}prd-*"
  }
}

resource "aws_security_group_rule" "pa-allow" {
  count             = length(data.aws_vpcs.prod.ids)
  type              = "ingress"
  from_port         = 8140
  to_port           = 8140
  protocol          = "tcp"
  cidr_blocks       = [sort(data.aws_vpcs.prod.ids)[count.index].cidr_block]
  security_group_id = aws_security_group.secg.id
  description       = "allow from ${sort(data.aws_vpcs.prod.ids)[count.index]}"
}
我得到一个错误:

错误:不支持的属性

在资源中的.././modules/mgt/ec2.tf第42行 “aws\u安全\u组\u规则”“pa允许”:42:cidr\u块= [排序(data.aws\u vpcs.prod.ids)[count.index].cidr\u块]

此值没有任何属性


我试过了,基于这个页面:
https://www.terraform.io/docs/providers/aws/d/vpc.html
,认为aws_vpc和aws_vpc会做类似的事情,但似乎没有。知道我该怎么做吗?

您可以使用data.aws\u vpc获得vpc的
SET
(而不是列表)。(我认为文件是错的…) 然后,您可以使用data.aws_vpc获取data.aws_vpc列表,并可以获取其中的cidr块

data "aws_vpcs" "prod" {
  tags = {
    Name = "${var.project}prd-*"
  }
}

data "aws_vpc" "prod" {
  count = length(data.aws_vpcs.prod.ids)
  id    = tolist(data.aws_vpcs.prod.ids)[count.index]
}

resource "aws_security_group_rule" "pa-allow" {
  count             = length(data.aws_vpcs.prod.ids)
  type              = "ingress"
  from_port         = 8140
  to_port           = 8140
  protocol          = "tcp"
  cidr_blocks       = [data.aws_vpc.prod[count.index].cidr_block]
  security_group_id = aws_security_group.secg.id
  description       = "allow from ${tolist(data.aws_vpcs.prod.ids)[count.index]}"
}

我认为您不需要在这里使用
排序
。此外,这看起来像0.12语法。是吗?@MattSchuchard,是的,这是0.12语法,我用的是atm。我相信语法在理论上是正确的,但可能不是正确的属性。@MattSchuchard,re,
sort
,问题是
数据。aws_vpcs.prod.ids
是一个集合,而不是一个列表,因此元素没有特定的顺序,因此不能像列表中那样通过数字索引访问。我使用sort来解决这个问题。根据文档,它是一个列表:如果我不使用sort,我会错误地说“记录集没有任何索引”,如果我使用sort,只有在它工作时(例如Description参数)。医生可能用“列表”这个词作为通用术语?