0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TerraformでNLB構築・応用編 Terraformでfor文を使おう!(for_each)

Last updated at Posted at 2024-12-21

はじめに

本記事はTerraformを使ったNLB構築第二弾【応用編】となります。
前回作成した、NLB用のセキュリティグループに大量のインバウンドルールの
構築・管理をTerraformで簡単に行う手法を紹介いたします。

想定状況

前回構築したNLBにオンプレのサーバーからのアクセスだけを許可したい場面を想定します。
オンプレのサーバーは静的なIPアドレスを持っています。
許可したいIPアドレスからのインバウンドルールをセキュリティグループに追加する必要があります。
指定したいサーバーの数(IPアドレスの数)が100台とか200台だった場合、
これをマネジメントコンソールから実装するのはとても大変でしょう。
Terrformで書くにしても100個、200個のresourceブロックを記述するのは大変です。
そこでTerraformにはfor_eachという便利な構文があります。

for_each

for_eachresoucemoduleブロックを繰り返し文として使えるようにできます。
たとえば下記のようなリソースは、

resource "aws_s3_bucket" "bucket1" {
  bucket = "bucket1"
}

resource "aws_s3_bucket" "bucket2" {
  bucket = "bucket2"
}

resource "aws_s3_bucket" "bucket3" {
  bucket = "bucket3"
}

下記のように1つにまとめて記述できます。

resource "aws_s3_bucket" "buckets" {
  for_each = toset(["bucket1", "bucket2", "bucket3"])
  bucket   = each.key
}

for_eachを使ってインバウンドルールを構築

第一弾の基礎編のソースコードに追記・編集していく形で紹介します。
まだ、読んでない方は是非こちらからご一読お願いいたします。
今回は話を簡単にするため5個のIPアドレスからの443ポートのインバウンドルールを追加します。
最終的なtfファイルが以下になります。

・security_group.tf

#許可したいIPアドレスリスト
locals {
  ip_list = [
    "172.31.0.11",
    "172.31.0.12",
    "172.31.0.13",
    "172.31.0.14",
    "172.31.0.15"
  ]
}

#セキュリティグループ本体
resource "aws_security_group" "sg_nlb" {
  vpc_id = <VPCのID>"
  name   = "nlb-alpha-sg"
}

#インバウンドルール1
resource "aws_vpc_security_group_ingress_rule" "allow_http" {
  from_port         = 80
  to_port           = 80
  ip_protocol       = "tcp"
  cidr_ipv4         = "172.31.0.11/32" #適当に許可したいIPアドレス
  security_group_id = aws_security_group.sg_nlb.id
}

#インバウンドルール2(for_eachで記述)
resource "aws_vpc_security_group_ingress_rule" "allow_https" {
 for_each = toset(local.ip_list)
  from_port         = 443
  to_port           = 443
  ip_protocol       = "tcp"
  cidr_ipv4         = "${each.value}/32" #静的IPアドレスのリストを代入
  security_group_id = aws_security_group.sg_nlb.id
}

#アウトバウンドルール1
resource "aws_vpc_security_group_egress_rule" "allow_all" {
  ip_protocol       = "-1"
  cidr_ipv4         = "0.0.0.0/0"
  security_group_id = aws_security_group.sg_nlb.id
}

NLB

NLB.tfのコードは前回と同じなので割愛。

構築されたリソース

リストで指定したIPアドレスからのインバウンドルールが構築できています。
image.png

おわりに

今回はfor_eachを使ってリスト化したIPアドレスからのインバウンドルールを構築する手法を紹介いたしました。
大量のIPアドレスからの許可ルールを作成しなければいけない際などに役立つかと思います。
今後もawsやTerraformに関する記事を投稿していく予定です。
また機会があれば認定資格の学習法などのtipsも公開できればと思います。
それではまた。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?