LoginSignup
4
2

More than 1 year has passed since last update.

【Terraform】dataブロックを使って同一VPC内のサブネット・セキュリティグループを一括取得する

Posted at

概要

Terraformで任意のVPC内に存在するサブネット・セキュリティグループの一覧を一括取得したい。
dataブロックfilterを使うことによって、VPCのIDから検索して一括取得することができる。

前提

任意のVPCにVPC名と同名のNameタグが付与されている
(タグ名でVPCを絞り込むため必要)
スクリーンショット 2022-12-23 9.55.22.png

コード

variable "vpc_name" {
    default = "my-vpc"
}

# NameタグからVPC情報を取得
data "aws_vpc" "self" {
    filter {
        name = "tag:Name"
        values = [var.vpc_name]
    }
}

# 上記で取得したVPCのIDから、同一VPC内に存在するサブネットID一覧を一斉取得
data "aws_subnets" "vpc" {
    filter {
        name   = "vpc-id"
        values = [data.aws_vpc.self.id]
    }
}

# 上記で取得したサブネットIDをキーに、サブネットの詳細情報を取得
data "aws_subnet" "self" {
    for_each = toset(data.aws_subnets.vpc.ids)

    vpc_id  = data.aws_vpc.self.id
    id      = each.value
}

# 以下セキュリティグループもサブネットと同様VPCのIDから取得
data "aws_security_groups" "self" {
    filter {
        name   = "vpc-id"
        values = [data.aws_vpc.self.id]
    }
}

data "aws_security_group" "self" {
    for_each = toset(data.aws_security_groups.self.ids)

    vpc_id  = data.aws_vpc.self.id
    id      = each.value
}

terraform applyを実行してstateを更新する

terraform stateで確認

terraform state list

data.aws_security_group.self["sg-XXXXXXXXXXXXXXXX"]
data.aws_security_group.self["sg-YYYYYYYYYYYYYYYY"]
data.aws_security_groups.self
data.aws_subnet.self["subnet-XXXXXXXXXXXXXXXX"]
data.aws_subnet.self["subnet-YYYYYYYYYYYYYYYY"]
data.aws_subnets.vpc
data.aws_vpc.self

取得したサブネットID一覧を確認
terraform state show data.aws_subnets.vpc

data "aws_subnets" "vpc" {
    id  = "ap-northeast-1"
    ids = [
        "subnet-XXXXXXXXXXXXXXXX",
        "subnet-YYYYYYYYYYYYYYYY",
    ]

    filter {
        name   = "vpc-id"
        values = [
            "vpc-XXXXXXXXXXXXXXX",
        ]
    }
}

取得したサブネットIDをキーにサブネット詳細情報を確認
terraform state show 'data.aws_subnet.self["subnet-XXXXXXXXXXXXXXXX"]'

data "aws_subnet" "self" {
    arn                                            = "arn:aws:ec2:ap-northeast-1:0000000000000000:subnet/subnet-XXXXXXXXXXXXXXXX"
    assign_ipv6_address_on_creation                = false
    availability_zone                              = "ap-northeast-1a"
    availability_zone_id                           = "apne1-az4"
    available_ip_address_count                     = 249
    cidr_block                                     = "10.0.11.0/24"
    default_for_az                                 = false
    enable_dns64                                   = false
    enable_resource_name_dns_a_record_on_launch    = false
    enable_resource_name_dns_aaaa_record_on_launch = false
    id                                             = "subnet-XXXXXXXXXXXXXXXX"
    ipv6_native                                    = false
    map_customer_owned_ip_on_launch                = false
    map_public_ip_on_launch                        = true
    owner_id                                       = "0000000000000000"
    private_dns_hostname_type_on_launch            = "ip-name"
    state                                          = "available"
    tags                                           = {
        "Name" = "subnet-a"
    }
    vpc_id                                         = "vpc-XXXXXXXXXXXXXXXX"
}

任意のVPC内に新規リソースを立てて、同一VPC内の既存サブネットやセキュリティグループを割り当てたい時に役に立つかも。

参考

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2