はじめに
今回はTerraformを使ったNLBの構築方法を紹介します。
基礎編と応用編の執筆を予定しており、本記事は基礎編になります。
基礎編では簡単なNLBの構築とセキュリティグループの作成を紹介します。
前提条件
今回は話を簡単にするため、VPC、サブネット、EC2は作成済み。
単純なNLB→EC2の構成を構築。
セキュリティグループ
まずはセキュリティグループを作成します。
・security_group.tf
#セキュリティグループ本体
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
resource "aws_vpc_security_group_ingress_rule" "allow_https" {
from_port = 443
to_port = 443
ip_protocol = "tcp"
cidr_ipv4 = "172.31.0.11/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を作成します。
・NLB.tf
# NLB本体
resource "aws_lb" "nlb" {
name = "nlb-alpha"
internal = false
load_balancer_type = "network"
security_groups = [aws_security_group.sg_nlb.id]
subnets = ["<サブネットIDID>"]
}
# NLBのターゲットグループ(HTTP)
resource "aws_lb_target_group" "tg_nlb_80" {
name = "tg-nlb-80"
port = 80
protocol = "TCP"
vpc_id = "<VPCID>"
target_type = "instance"
}
# NLBのターゲットグループへのターゲット紐づけ(HTTP)
resource "aws_lb_target_group_attachment" "tg_nlb_attachment_80" {
target_group_arn = aws_lb_target_group.tg_nlb_80.arn
target_id = "<EC2インスタンスID>"
}
# NLBのリスナー設定(NLBとターゲットグループの紐づけ)(HTTP)
resource "aws_lb_listener" "listener_nlb_80" {
load_balancer_arn = aws_lb.nlb.arn
port = 80
protocol = "TCP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.tg_nlb_80.arn
}
}
# NLBのターゲットグループ(HTTPS)
resource "aws_lb_target_group" "tg_nlb_443" {
name = "tg-nlb-443"
port = 443
protocol = "TCP"
vpc_id = "<VPCID>"
target_type = "instance"
}
# NLBのターゲットグループへのターゲット紐づけ(HTTPS)
resource "aws_lb_target_group_attachment" "tg_nlb_attachment_443" {
target_group_arn = aws_lb_target_group.tg_nlb_443.arn
target_id = "<EC2インスタンスID>"
}
# NLBのリスナー設定(NLBとターゲットグループの紐づけ)(HTTPS)
resource "aws_lb_listener" "listener_nlb_443" {
load_balancer_arn = aws_lb.nlb.arn
port = 443
protocol = "TCP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.tg_nlb_443.arn
}
}
構築されたリソース
・セキュリティグループ
・NLB
おわりに
今回の基礎編ではterraformを使って簡単なNLB、SGの構築を紹介しました。
次回の応用編では大量の外部IPアドレスからのインバウンドルールをterraformで簡単に管理する方法を紹介予定です。