💭

【Terraform】ALBの作成

2025/01/13に公開

はじめに

下記のELBを作成していきます。

ALBの作成

aws_lb

  1. name : string : ロードバランサー名
  2. internal : bool : 内部向けかどうか
  3. load_balancer_type : enum :application,network,gateway
  4. security_gropups : string[] : セキュリティグループ
  5. subnet : string[] : サブネット
  6. tags : object : タグ
alb.tf
#------------------
#ALB
#------------------
resource "aws_alb" "alb" {
  name               = "${var.project}-${var.environment}-web-sg"
  internal           = false
  load_balancer_type = "application"
  security_groups = [
    aws_security_group.web_sg
  ]
  subnets = [aws_subnet.private_subnet_1a.id, aws_subnet.private_subnet_1c.id]
}

ターゲットグループとアタッチメントの作成

aws_lb_target_group

  1. name : string : ロードバランサー名
  2. port : number : ポート番号
  3. protocol : enum : HTTP,HTTPS,TCP,UDP,TCP_UDP
  4. vpc_id : string[] : VPC ID
  5. tags : object : タグ

aws_lb_target_group_attachment

  1. target_group_arn : string : 所属させたいターゲットグループのARN
  2. target_id : string : 所属させたいEC2のインスタンスID
alb.tf
#------------------
#target group
#------------------
resource "aws_lb_target_group" "alb_target_group" {
  name               = "${var.project}-${var.environment}-app-tg"
  port = 3000
  protocol = "HTTP"
  vpc_id = aws_vpc.vpc.id

  tags = {
    Name    = "${var.project}-${var.environment}-app-tg"
    Project = var.project
    Env     = var.environment
  }
}

resource "aws_lb_target_group_attachment" "instance" {
    target_group_arn = aws_lb_target_group.alb_target_group.arn
    target_id = aws_instance.app_server.id
}

リスナーの作成

aws_lb_listener(HTTP)

  1. load_balancer_arn : string : ロードバランサーのARN
  2. port : number : ポート番号(80,443)
  3. protcol : enum : HTTP
  4. default_action : block :type(forward,redirectなど),target_group_arn(forwardする際の転送先)
alb.tf
#------------------
#listener
#------------------
resource "aws_lb_listener" "alb_listener_http" {
  load_balancer_arn = aws_lb.alb.arn
  port = 80
  protocol = "HTTP"

  default_action {
    type = "forward"
    target_group_arn = aws_lb_target_group.alb_target_group.arn
  }
}

aws_lb_listener(HTTPS)

ACMの証明書が必要。

  1. ssl_policy
  2. certificate_arn

マネジメントコンソールからALBが作成されているか確認。

Discussion