[Terraform AWS]ALBにACMで複数ドメインを指定しようとしたら出たエラー Error creating LB Listener: DuplicateListener: A listener already exists on this port for this load balancer

[Terraform AWS]ALBにACMで複数ドメインを指定しようとしたら出たエラー Error creating LB Listener: DuplicateListener: A listener already exists on this port for this load balancer

要件

AドメインとBドメインのリクエストを、1つのALBでhttpとhttpsの両方をリスナーとして捌きたい。

httpsはACMを利用する(ACMは別途取得済)。

ALBの前段にはRoute53があり、Aドメイン・Bドメイン両方のAレコードをALBに向けてある状態(別途設定済)。

今回は、ALBの設定にフォーカスする。

エラー内容

ALB を Terraform で構築している際に、httpsリスナーに複数ドメインを指定したいと思い、aws_lb_listener リソースを複数指定したところ、以下のようなエラーが発生しました。

Error creating LB Listener:
DuplicateListener:
A listener already exists on this port for this load balancer

エラーメッセージからみるに、1つのリスナー・同一ポートには1つしか指定出来ないみたいです。今回、https 443に複数設定しようとしていた為、エラーとなったようです。

対応内容

調べたところ、1個目のhttpsリスナーは aws_lb_listener で、2個目以降のhttpsリスナーは aws_lb_listener_certificate を使用する必要があったようです。

httpのリスナーはaws_lb_listener で大丈夫です。

AドメインとBドメインを1つのALBのhttpsリスナーとする場合のサンプル

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
  }
}

resource "aws_lb_listener" "alb_listener_https_a" {
  load_balancer_arn = aws_lb.alb.arn
  port              = "443"
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = AドメインACMのARN

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

resource "aws_lb_listener_certificate" "alb_listener_certificate" {
  listener_arn = aws_lb_listener.alb_listener_https_a.arn
  certificate_arn = BドメインACMのARN
}

という形でした。Terraformはドキュメントに色々書いてあるので結局ドキュメントを見ろという事でした。

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です