はじめに
本記事はTerraformを使ったNLB構築第二弾【応用編】となります。
前回作成した、NLB用のセキュリティグループに大量のインバウンドルールの
構築・管理をTerraformで簡単に行う手法を紹介いたします。
想定状況
前回構築したNLBにオンプレのサーバーからのアクセスだけを許可したい場面を想定します。
オンプレのサーバーは静的なIPアドレスを持っています。
許可したいIPアドレスからのインバウンドルールをセキュリティグループに追加する必要があります。
指定したいサーバーの数(IPアドレスの数)が100台とか200台だった場合、
これをマネジメントコンソールから実装するのはとても大変でしょう。
Terrformで書くにしても100個、200個のresource
ブロックを記述するのは大変です。
そこでTerraformにはfor_each
という便利な構文があります。
for_each
文
for_each
はresouce
やmodule
ブロックを繰り返し文として使えるようにできます。
たとえば下記のようなリソースは、
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アドレスからのインバウンドルールが構築できています。
おわりに
今回はfor_each
を使ってリスト化したIPアドレスからのインバウンドルールを構築する手法を紹介いたしました。
大量のIPアドレスからの許可ルールを作成しなければいけない際などに役立つかと思います。
今後もawsやTerraformに関する記事を投稿していく予定です。
また機会があれば認定資格の学習法などのtipsも公開できればと思います。
それではまた。