概要
ターゲットグループのタイプとして ALB を指定できるようになったことで、ALB のプライベート IP アドレスの変化への対応がマネージドになりました。この記事ではリソースの作成方法を記述します。
注意点としては、この構成では ALB で SSL を終端させることはできないということです。ALB で HTTP リスナーを HTTPS リスナーにリダイレクトするように設定しても、NLB を経由した場合トラフィックは ALB の HTTPS ポートに到達しません。したがって TLS 暗号化をロードバランサーにオフロードしたい場合、NLB の TLS 終端を使用する必要があります。
ただし NLB に TLS:443 ではなく TCP:443 リスナーを設定することで、ALB で TLS 終端させることができます。このことに関する記事を書きました。
ALB を作成する
ロードバランサー名を入力し、スキーム、IP アドレスタイプを選択します。
サブネットは最低 2 つ選択する必要があります。
セキュリティグループを選択します。画像中のセキュリティグループ「nlb-alb-sg」は以下の通りです。
インバウントルール | アウトバウンドルール |
---|---|
ポート:80, ソース:0.0.0.0/0 | ポート:すべて, ソース:0.0.0.0/0 |
リスナーとルーティングの設定は以下の通りです。転送先にはインスタンスタイプのターゲットグループを選択し、ターゲットには Web サーバを指定します。この記事ではここで指定するターゲットグループの作成方法については記述しませんが、以下に設定情報を記載します。
ターゲットタイプ | プロトコル | ポート | ヘルスチェックプロトコル | ヘルスチェックパス | プロトコルバージョン |
---|---|---|---|---|---|
インスタンス | HTTP | 80 | HTTP | / | HTTP1 |
設定を確認します。
作成後、リダイレクト用のリスナーを追加します。これにより、HTTP リクエストを 443 ポートに転送し、その後の通信は HTTPS で行うことができます。作成した ALB を選択し、「リスナーの追加」をクリックします。
以下のようにリダイレクト先を指定します。
最後にログを有効化するために、「アクション」→「属性の編集」→「アクセスログの有効化」の順にクリックします。
動作確認
ブラウザを開き、以下を URL 欄に貼り付けます。alb-897482902.ap-northeast-1.elb.amazonaws.com
は ALB の DNS 名です。
http://alb-897482902.ap-northeast-1.elb.amazonaws.com/
以下にログの一部を記載します。HTTP リクエストが HTTPS にリダイレクトされていることがわかります。(172.31.25.134 は ALB のプライベート IP アドレス)
type | client:port | target:port | elb_status_code | target_status_code | request |
---|---|---|---|---|---|
http | xxx.xxx.xxx.xxx:60225 | - | 301 | - | GET http://alb-897482902.ap-northeast-1.elb.amazonaws.com:80/ HTTP/1.1 |
h2 | xxx.xxx.xxx.xxx:60234 | 172.31.25.134:80 | 200 | 200 | GET https://alb-897482902.ap-northeast-1.elb.amazonaws.com:443/ HTTP/2.0 |
ALB のログに関しては以下に詳細が載っています。
以下は Wireshark のキャプチャです。
ターゲットグループを作成する
ターゲットタイプが ALB であるターゲットグループを作成します。
ヘルスチェックについては以下のように設定します。
先ほど作成した ALB を選択します。
NLB を作成する
NLB を選択します。
NLB では最低 1 つの AZ を選択します。インスタンスが存在するサブネットを選択する必要があります。
リスナー、ルーティングは以下のように設定します。転送先には先ほど作成した ALB タイプのターゲットグループを選択します。
設定を確認します。
動作確認
ブラウザを開き、以下を URL 欄に貼り付けます。nlb-dae1232ee0feabdb.elb.ap-northeast-1.amazonaws.com
は NLB の DNS 名です。
http://nlb-dae1232ee0feabdb.elb.ap-northeast-1.amazonaws.com
以下は ALB のログです。ALB の HTTPS リスナーには到達していないことがわかります。
type | client:port | target:port | elb_status_code | target_status_code | request |
---|---|---|---|---|---|
http | xxx.xxx.xxx.xxx:60921 | - | - | 301 | GET http://nlb-dae1232ee0feabdb.elb.ap-northeast-1.amazonaws.com:80/ HTTP/1.1 |
ALB のリスナーを変更する
以下のように、ALB の HTTP リスナーのルールをリダイレクトではなくインスタンスのターゲットグループに変更します。
その後、NLB の 40 番ポートにアクセスすると、ALB タイプのターゲットグループに転送され、最終的にインスタンスのターゲットグループに転送されます。
ログは以下の通りです(172.31.25.134 は ALB のプライベート IP アドレス)。
type | client:port | target:port | elb_status_code | target_status_code | request |
---|---|---|---|---|---|
http | xxx.xxx.xxx.xxx:61358 | 172.31.25.134:80 | 200 | 200 | GET http://nlb-dae1232ee0feabdb.elb.ap-northeast-1.amazonaws.com:80/ HTTP/1.1 |
NLB で TLS 終端を設定する
ここではインスタンスタイプのターゲットグループを作成し、NLB の TLS リスナーに指定します。
動作確認
NLB の DNS 名に HTTPS でアクセスし、Web コンテンツを取得できることを確認します。
以下は Wireshark のキャプチャです。
参考記事