【入門#10】TerraformでALB/ターゲットグループを作ろう
今回の目標
Terraformを使って、ALBを作ります。
将来的には下記のシステム構成図になるように進めていきますが、今回はその中のALB/ターゲットグループに絞って解説します。
◯今回のシステム構成図の全体像
関連記事:https://zenn.dev/alt_tanuki/articles/7c1f97da33496b
前提
下記記事で作成したサブネット/セキュリティグループ/EC2を使用していきます。
【入門#4】TerraformでAWS基礎のネットワーク(VPC/サブネット等)を作ろう
【入門#5】Terraformでセキュリティグループを作ろう
【入門#8】TerraformでEC2を作ろう
【入門#9】TerraformでACM証明書を作ろう
ではやっていきましょう!
ALBを書いていきます
よくある例として、ALBはcompute.tfに記載していきます。
compute.tfを書いていきます。
ALB本体
resource "aws_lb" "cask_tokyo_ec2" {
load_balancer_type = "application"
name = "cask-tokyo-ec2"
internal = false
ip_address_type = "ipv4"
security_groups = [aws_security_group.cask_tokyo_ec2_sg_alb.id]
subnets = [
aws_subnet.cask_tokyo_ec2_subnet_public1.id,
aws_subnet.cask_tokyo_ec2_subnet_public2.id
]
tags = {
Name = "tf_test_alb"
}
}
ターゲットグループ
resource "aws_lb_target_group" "cask_tokyo_ec2_tgtgrp" {
target_type = "instance"
name = "cask-tokyo-ec2-tgtgrp"
protocol_version = "HTTP1"
port = 80
protocol = "HTTP"
vpc_id = aws_vpc.cask_tokyo_ec2_vpc.id
tags = {
Name = "cask-tokyo-ec2-tgtgrp"
}
health_check {
interval = 30
path = "/health"
}
}
443リスナー
resource "aws_lb_listener" "cask_tokyo_ec2_listener_https" {
load_balancer_arn = aws_lb.cask_tokyo_ec2.arn
port = "443"
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-2016-08"
certificate_arn = aws_acm_certificate.cask_tokyo_cert.arn
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.cask_tokyo_ec2_tgtgrp.arn
}
}
80リスナー (443へリダイレクト)
resource "aws_lb_listener" "cask_tokyo_ec2_listener_http" {
load_balancer_arn = aws_lb.cask_tokyo_ec2.arn
port = "80"
protocol = "HTTP"
default_action {
type = "redirect"
redirect {
port = "443"
protocol = "HTTPS"
status_code = "HTTP_301"
}
}
}
各パラメータ解説
AWSの画面になぞらえて解説します。
ALB: ロードバランサータイプ
今回はALBを指定します。
◯ソース
load_balancer_type = "application"
◯AWSコンソール
ALB: 基本的な設定
◯ソース
# ロードバランサー名
name = "cask-tokyo-ec2"
# スキーム
internal = false
# ロードバランサーの IP アドレスタイプ
ip_address_type = "ipv4"
◯AWSコンソール
ALB: ネットワークマッピング
配置したいサブネットを指定します。
サブネットを指定するだけでOKですが、複数選択しないとエラー発生します。
◯ソース
subnets = [
aws_subnet.cask_tokyo_ec2_subnet_public1.id,
aws_subnet.cask_tokyo_ec2_subnet_public2.id
]
◯AWSコンソール
ALB: セキュリティグループ
別途作成したセキュリティグループを設定してきます。
◯ソース
security_groups = [aws_security_group.cask_tokyo_ec2_sg_alb.id]
◯AWSコンソール
ターゲットグループ: ターゲットタイプ
EC2を指定するため、インスタンスを指定します。
◯ソース
target_type = "instance"
◯AWSコンソール
ターゲットグループ: 基本的な設定
EC2を指定するため、インスタンスを指定します。
◯ソース
# ターゲットグループ名
name = "cask-tokyo-ec2-tgtgrp"
# プロトコル : ポート
protocol = "HTTP"
port = 80
# VPC
vpc_id = aws_vpc.cask_tokyo_ec2_vpc.id
# プロトコルバージョン
protocol_version = "HTTP1"
◯AWSコンソール
ターゲットグループ: ヘルスチェック
EC2を指定するため、インスタンスを指定します。
◯ソース
health_check {
# ヘルスチェックプロトコル
protocol = "HTTP"
# ヘルスチェックパス
path = "/health"
}
◯AWSコンソール
ターゲットグループ: ヘルスチェック
EC2を指定するため、インスタンスを指定します。
◯ソース
health_check {
# ヘルスチェックプロトコル
protocol = "HTTP"
# ヘルスチェックパス
path = "/health"
}
◯AWSコンソール
ALBリスナー(443/HTTPS): リスナーの詳細
リスナーの大枠を設定します。
◯ソース
# 紐づくロードバランサー
load_balancer_arn = aws_lb.cask_tokyo_ec2.arn
# プロトコル/ポート
protocol = "HTTPS"
port = "443"
# デフォルトアクション
default_action {
# ターゲットグループへの転送
type = "forward"
# 転送先のターゲットグループ
target_group_arn = aws_lb_target_group.cask_tokyo_ec2_tgtgrp.arn
}
◯AWSコンソール
ALBリスナー(443/HTTPS): セキュアなリスナー設定
リスナーのSSL/TLS周りの設定をします。
「【入門#9】TerraformでACM証明書を作ろう」で作成したACMを使用します。
◯ソース
# SSLのポリシー
ssl_policy = "ELBSecurityPolicy-2016-08"
# ACM証明書のARN
certificate_arn = aws_acm_certificate.cask_tokyo_cert.arn
◯AWSコンソール
ALBリスナー(80/HTTP): リスナーの詳細
リスナーの大枠を設定します。
◯ソース
# 紐づくロードバランサー
load_balancer_arn = aws_lb.cask_tokyo_ec2.arn
# プロトコル/ポート
protocol = "HTTP"
port = "80"
# デフォルトアクション(443へのリダイレクト設定)
default_action {
type = "redirect"
redirect {
port = "443"
protocol = "HTTPS"
status_code = "HTTP_301"
}
}
◯AWSコンソール
以上です!
上記設定のうえ、terraform applyを行うと諸々AWSに作成されていることが確認できました!!
ALBはいつも簡単にできるイメージですけど色々設定することが多いですね。。。
いや、、思い出してみると設定値多かったかも。
今回はほとんどデフォルト値を使っているため、もう少し詳細設定されたい場合は
更に設定が必要になりますね。
下記の記事を目次として、続きをどんどん構築を行っていきますので、今回作成したALBの使い方(Route53からの設定)などが気になる方はぜひ見に来てください!
Discussion