ALBで静的IPアドレスを使うためのテンプレート(NLB-ALB-EC2構成)からNLB-EC2構成に切り替えてみた

2021.05.25

いわさです。

以前、Application Load Balancer(ALB)のIPアドレスを固定化する必要がある場合、以下のNetwork Load Balancer(NLB)を使ったテンプレートを用いられることがありました。

IPアドレス固定化を行いつつ、スティッキーセッションを使いたいなどのシーンで使われていましたが、昨今のアップデートでNLBへもスティッキーセッションが実装されました。

これによってALBが不要になった環境があったため、NLBから直接EC2へルーティングさせるように変更してみたのですが、ALBとNLBでのターゲットグループの違いなど、いくつか注意点がありましたので記事にしました。

以下、回りくどいかもしれませんが設定エラーになる手順を踏みます。
最終的な設定方法を知りたい方は「新規にターゲットグループを作成する」まで読み飛ばしてください。

現状

以下のようにIPアドレスでサイトへアクセスをします。
このIPアドレスはNLBに割り当てられたElasticIPアドレスです。

※HTTPS/SSLは設定していないため環境の差異は適宜読み替えて頂けると幸いです。

ターゲットグループのアタッチに失敗しました

まず、オートスケーリンググループ(ASG)に設定されているターゲットグループをALB用ターゲットグループからNLB用ターゲットグループにアタッチとすると、以下のエラーが発生します。

ターゲットグループのアタッチに失敗しました
Provided Target Group 'arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:targetgroup/iwasa-nlbtg-20210525/5d78f8da2dfe3209' has invalid target type. Please ensure all provided Target Groups have target type of instance.

アタッチ先のターゲットグループターゲットの種類が"インスタンス"である必要があります。

テンプレートで作成されたALB用のターゲットグループをNLBに設定できない

では、ASGが既にアタッチされているALB用のターゲットグループをNLBに設定してみます。
これは、選択することが出来ません。

Network Load Balancer のターゲットグループは、次のプロトコルとポートをサポートします。
プロトコル: TCP、TLS、UDP、TCP_UDP

NLBに設定出来るターゲットグループはプロトコルの制限があります。

テンプレートから作成されたALB用のターゲットグループはプロトコルがHTTPなので選択が出来ません。

新規にターゲットグループを作成する

今回のケースでは新規ターゲットグループを作成する形となります。
NLBで使うために、プロトコルをここでは"TCP"、ASGを使うためにターゲットの種類を"インスタンス"を選択します。

なお、ヘルスチェックについてはHTTPプロトコルが使えます。

作成したターゲットグループをASGから選択します。
選択した時点ではロードバランサーに紐付いていないためルーティングされません。

次に、ロードバランサーからリスナーの編集を行います。
同一ポートで転送先だけ切り替えたいので、リスナー追加ではなく編集となります。

しばらく経つとステータスがhealthyになるので、古いターゲットグループをASGから削除します。

アクセス出来るようになりました。

まとめ

スティッキーセッションやクロスゾーン負荷分散など、NLBでも対応出来る項目を使うためにこのテンプレートを使い続けている場合などに運用を見直すなどでALBが不要になった場合、参考にして頂ければと思います。