如何使用 Terraform 获取现有 VPC 的所有 CIDR 并将它们作为入站规则添加到安全组?

Man*_*ddy 1 terraform terraform-provider-aws

我有一个现有的 VPC,它有 4 个 CIDR,我需要检索这些 CIDR 并将它们作为入站规则添加到安全性中。有没有办法在 Terraform 中做到这一点?我没有找到一种方法来做到这一点 Terraform

data "aws_vpc" "example_vpc" {
  id = "vpc-xxxxx" # Replace with the ID of your VPC
}

output "vpc_cidr_block" {
  value = "${data.aws_vpc.example_vpc.cidr_block}"
}
Run Code Online (Sandbox Code Playgroud)

我已尝试上面的代码片段,但输出值仅给出主要 CIDR。

Terraform 版本:v0.14.5

Ant*_*ton 6

要获取默认 CIDR 块和关联的CIDR块,您需要使用数据源cidr_block_associations的属性aws_vpc

data "aws_vpc" "example" {
  id = "vpc-0f67a3b2exxxxxx"
}

resource "aws_security_group_rule" "example" {
  type              = "ingress"
  from_port         = 22
  to_port           = 22
  protocol          = "tcp"
  cidr_blocks       = data.aws_vpc.example.cidr_block_associations[*].cidr_block
  security_group_id = "sg-0e40fe769816xxxxx"
}
Run Code Online (Sandbox Code Playgroud)

cidr_block_associations属性如下所示:

cidr_block_associations = [
  {
    association_id = "vpc-cidr-assoc-0b3673ed50fcxxxxx"
    cidr_block     = "172.31.0.0/16" # default CIDR
    state          = "associated"
  },
  {
    association_id = "vpc-cidr-assoc-050fdc9392e9xxxxx"
    cidr_block     = "172.32.0.0/20" # associated CIDR
    state          = "associated"
  },
]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它是一个具有 3 个属性的对象列表。为了仅提取cidr_block值,我在示例中使用了Terraform splat 表达式。