代码之家  ›  专栏  ›  技术社区  ›  MacUsers

Terraform:如何从VPC id获取VPC CIDR?

  •  0
  • MacUsers  · 技术社区  · 7 年前

    我在寻找线索 PIV4_苹果酒 对于给定的专有网络,使用aws_专有网络数据源首先识别专有网络,并从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]}"
    }
    

    我得到了一个错误:

    错误:不支持的属性

    在..//模块/mgt/ec2。tf第42行,参考资料 “aws_安全_组_规则”“pa允许”:42:cidr_块= [sort(data.aws_vpcs.prod.ids)[count.index]。苹果酒块]

    此值没有任何属性。

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

    0 回复  |  直到 7 年前
        1
  •  1
  •   RyanKim    7 年前

    你可以 SET (非列表)使用数据的专有网络。aws_vpcs。(我认为文件是错的…) 然后你可以得到数据。aws_vpc使用数据列表。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]}"
    }