スポンサーリンク
AWSELBTerraform

【Terraform】ALB→NLBの連携でハマった話

AWS

概要

Terraformで以下の構成図のようにALBからNLBへ連携する際にハマりました。
当記事にて解決策を記載します。

ハマったところ

バックエンドのWebアプリとNLB設置完了後、ALBのターゲットグループリソース(aws_lb_target_group)でNLBへ連携しようとしました。
が・・・Terraform公式ドキュメントを参照するとtarget_type引数に”nlb”が存在しません!
target_type引数でサポートされている値は”instance”、”ip”、”lambda”そして”alb”のみです。
※試しに「target_type =”alb”」でterraform planしてみましたがエラーが発生しました。

Terraform Registry

解決策

NLBへ静的IPをセットして、ALBのターゲットグループからは「target_type =”ip”」で連携します

1.NLBへ静的IPをセット

  • 以下のようにsubnet_mapping引数を使用して、配置先のサブネットとそのIPアドレス範囲内のプライベートIPアドレスを指定します。
# NLB IPs
variable "target_list" {
  type = list

  default = [
    "10.10.30.10", //private-1a
    "10.10.40.10", //private-1c
  ]
}

# NLB
resource "aws_lb" "nlb" {
  load_balancer_type = "network"
  name               = "${var.prefix}-nlb01"
  internal           = true
  subnet_mapping {
    subnet_id            = "${var.private-subnet-1a-id}"
    private_ipv4_address = "${element(var.target_list, 0)}" // "10.10.30.10"
  }
  subnet_mapping {
    subnet_id            = "${var.private-subnet-1c-id}"
    private_ipv4_address = "${element(var.target_list, 1)}" // "10.10.40.10"
  }
  tags        = {
        Name = "${var.prefix}-nlb01"
  }
}
Terraform Registry

2.ALBのターゲットグループへNLBの静的IPを紐づけ

  • ALBのターゲットグループリソース(aws_lb_target_group)の引数へ「target_type = “ip”」をセットします。
  • ターゲットグループへ連携先をアタッチするリソース(aws_lb_target_group_attachment)のtarget_id引数へNLBの静的IPをセットします。
    ※以下の例では「variable “target_list”」へ定義されている2つの静的IPがセットされます。
# ALB ターゲットグループ
resource "aws_lb_target_group" "alb" {
  name = "${var.prefix}-alb-target01"
  target_type = "ip"
  vpc_id = "${var.vpc01-id}"
  port        = 80
  protocol    = "HTTP"
  # ヘルスチェック
  health_check {
    port = 80
    path = "/"
  }
}
# ALBのターゲットグループへのターゲット紐づけ
resource "aws_lb_target_group_attachment" "alb" {
  count            = "${length(var.target_list)}"
  target_group_arn = "${aws_lb_target_group.alb.arn}"
  target_id        = "${element(var.target_list, count.index)}" // "10.10.30.10"と"10.10.40.10"をセット
  port             = 80
}
Terraform Registry

まとめ

NLBへ静的IPがセット可能な事を知りませんでした。。。(ElasticIPなどもセット出来るようです。)
Web上でALB→NLBの構築例があまり見つけられなかったので、NLBへ静的IPがセット可能な事が判明するまでハマり続けていました。笑

コメント

  1. 匿名 より:

    aws consoleからだとローカルなip addressは固定でセットできないんですよね。

タイトルとURLをコピーしました