👋

TerraformのALBのモジュールファイル

2023/10/29に公開

ALBのモジュールファイル

alb.tfファイル
# ALB(Application Load Balancer)のリソースを作成
resource "aws_lb" "this" {
  name               = var.alb_name  # ロードバランサーの名前を設定
  internal           = false  # 内部ロードバランサーかどうか
  load_balancer_type = "application"  # ロードバランサーのタイプ
  security_groups    = var.security_group_ids  # セキュリティグループのID
  subnets            = var.subnet_ids  # サブネットのID
  enable_deletion_protection = false  # 削除保護を無効化
  enable_http2       = true  # HTTP/2を有効化
  idle_timeout       = 60  # アイドルタイムアウト時間
}

# ターゲットグループのリソースを作成
resource "aws_lb_target_group" "this" {
  name     = "sample-dev-users-tg"  # ターゲットグループの名前
  port     = 80  # ポート番号
  protocol = "HTTP"  # プロトコル
  vpc_id   = var.vpc_id  # VPCのID

  # ヘルスチェック設定
  health_check {
    enabled             = true  # ヘルスチェックを有効化
    path                = "/"  # ヘルスチェックのパス
    protocol            = "HTTP"  # ヘルスチェックのプロトコル
    healthy_threshold   = 5  # ヘルシーと判定するためのしきい値
    unhealthy_threshold = 2  # アンヘルシーと判定するためのしきい値
    timeout             = 5  # タイムアウト時間
    interval            = 6  # ヘルスチェックの間隔
    matcher             = "200"  # ヘルスチェックのマッチャー
  }
}


variables.tfファイル
# 各種変数の定義

# ALBの名前
variable "alb_name" {
  description = "ロードバランサーの名前"
  type        = string
}

# ALBのスキーム
variable "scheme" {
  description = "スキーム(internet-facing または internal)"
  type        = string
  default     = "internet-facing"
}

# ALBのIPアドレスタイプ
variable "ip_address_type" {
  description = "IPアドレスのタイプ(ipv4)"
  type        = string
  default     = "ipv4"
}

# VPCのID
variable "vpc_id" {
  description = "VPCのID"
  type        = string
}

# サブネットのID
variable "subnet_ids" {
  description = "サブネットIDのリスト"
  type        = list(string)
}

# セキュリティグループのID
variable "security_group_ids" {
  description = "セキュリティグループIDのリスト"
  type        = list(string)
}

# SSL証明書のARN
variable "certificate_arn" {
  description = "The ARN of the SSL certificate"
  default     = null
}

output.tfファイル
# 出力変数の定義

# 作成したALBのARNを出力
output "alb_arn" {
  description = "作成したALBのARN"
  value       = aws_lb.this.arn
}

# 作成したターゲットグループのARNを出力
output "target_group_arn" {
  description = "作成したターゲットグループのARN"
  value       = aws_lb_target_group.this.arn
}



providers.tfファイル
# 必要なプロバイダとそのバージョンを定義
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"  // AWSプロバイダのソース
      version = "~> 5.0"          // バージョン指定
    }
  }
}

# AWSプロバイダの設定
provider aws {
  region = "ap-northeast-1"  // AWSリージョン(東京リージョン)
}


README.mdファイル
ファイル名 セクション 説明
alb.tf resource "aws_lb" "this" Application Load Balancer(ALB)の設定。セキュリティグループ、サブネット、その他のオプション(HTTP/2、タイムアウトなど)を定義。
resource "aws_lb_target_group" "this" ターゲットグループの設定。ヘルスチェック、プロトコル、ポートなどを定義。
variables.tf variable "alb_name" ALBの名前を定義する変数。
variable "scheme" ALBのスキーム(internet-facingまたはinternal)を定義する変数。
variable "ip_address_type" ALBのIPアドレスタイプ(ipv4)を定義する変数。
variable "vpc_id" ALBを作成するVPCのIDを定義する変数。
variable "subnet_ids" ALBに使用するサブネットIDのリストを定義する変数。
variable "security_group_ids" ALBに割り当てるセキュリティグループIDのリストを定義する変数。
variable "certificate_arn" SSL/TLS証明書のARNを定義する変数。デフォルトはnull
output.tf output "alb_arn" 作成したALBのARNを出力する。
output "target_group_arn" 作成したターゲットグループのARNを出力する。

Discussion