AWS Application Load Balancer 複数ポートの設定メモ

クラウド
クラウド
スポンサーリンク

AWS Application Load Balancer は、アプリケーションレイヤーで負荷分散ができるロードバランサーです。HTTPリクエストを元に、ロードバランサー配下のサーバーに処理を振り分けられるのが特徴とされています。また、HTTP/2、WebSocket、セッション維持などにも対応しています。

Application Load Balancer の設定は、HTTP(S) 標準のポート80番やポート443番だけで設定するのであれば、特に迷うことはないと思いますが、たまたまロードバランサーやサーバーの待ち受けポートを変えて複数設定することがあり、ポートの設定方法に小一時間悩んでしまいました。そこで今回は、AWS Application Load Balancer を複数ポートで設定する手順をメモしておこうと思います。

Application Load Balancer の設定概要

Application Load Balancer(図のALB)を、ポート80番とポート2301番で待ち受けするように設定し、受信ポート80番のターゲットグループと、受信ポート2301番のターゲットグループにそれぞれ振り分けます。

上の図では表現できていませんが、ターゲットグループを2つ作成し、同じEC2インスタンスを別のポートで登録するのが、今回の設定のミソになります。

VPC にサブネットを作成

Application Load Balancer は、EC2-VPC(バーチャルプライベートクラウド)のみサポートされています。また、ロードバランサーを作成する時に、2 つ以上のアベイラビリティーゾーンからサブネットを指定する必要がありますので、下準備として、異なるアベイラビリティーゾーンのサブネットを少なくとも2つ作成しておきます。

[サービス] → [VPC] → [サブネット]

WEBサーバ(EC2)の設定

ターゲットグループに登録する2台のEC2インスタンスは、先ほど作成した異なるアベイラビリティーゾーンのサブネットに1台づつ配置しておきます。

[サービス] → [EC2] → [インスタンス]

また、セキュリティグループで、TCP/80番とTCP/2301番を開いておきましょう。

[アクション] → [ネットワーキング] → [セキュリティグループの変更]

EC2インスタンスのWEBサーバは、バーチャルホスト機能を使って、ポート80番とポート2301番で待ち受けするように設定しておきます。下は Apache httpd での設定例です。今回はポートベースのバーチャルホストなので ServerName はなんでもかまいません。

Listen 80
Listen 2301

NameVirtualHost *:80
NameVirtualHost *:2301

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/var/www/html80"
</VirtualHost>

<VirtualHost *:2301>
    ServerName localhost
    DocumentRoot "/var/www/html2301"
</VirtualHost>

ロードバランサーの作成

本題の Application Load Balancer の作成です。設定する過程で、ポート80番で待ち受けするターゲットグループも作成します。

[サービス] → [EC2] → [ロードバランサー] 画面で「ロードバランサーの作成」をクリック

Application Load Balancer を選択し、「次へ」をクリック

ステップ 1: ロードバランサーの設定

適当な名前を入力し、「プロトコル HTTP ポート2301番」のリスナーを追加します。(下に続きます)

【補足】ここでは下図の赤丸部分のポートを設定しています。

(続き)下にスクロールして、先ほど異なるアベイラビリティーゾーンのサブネットを作成したVPCを選択し(+)ボタンをクリックしてサブネットを選択したら、次の手順に進みます。

ステップ 2: セキュリティ設定の構成

今回、HTTPS は使いませんので、そのまま次の手順に進みます。

ステップ 3: セキュリティグループの設定

セキュリティグループの設定で、TCP/80番とTCP/2301番を選択しておきます。

ステップ 4: ルーティングの設定

ここからは、ターゲットグループの設定になります。ヘルスチェックはそのままの設定で問題ありません。

適当な名前を入力し、ポートが「80」であることを確認したら、次の手順に進みます。

【補足】ここでは下図の赤枠部分のポート80番を設定しています。

ステップ 5: ターゲットの登録

ターゲットグループに登録するインスタンスを選択し、ポート「80」のままで「登録済みに追加」をクリックします。

【補足】ここでは下図の赤枠部分、EC2のポート80番を指定しています。

今回はターゲットグループと同じポート80番で登録しましたが、ターゲットグループがポート80番で待ち受けしていても、配下のEC2などインスタンスの待ち受けポートは80番以外でも構いません。また、同じインスタンスを別のポートで複数登録することもできます。例えば、EC2-01をポート80番のほかに、81番、82番、83番でも登録することが可能です。
 

「登録されたインスタンス」に、インスタンスが追加されたら、次の手順に進みます。

ステップ 6: 確認

設定内容を確認し、間違いがなければ「作成」ボタンをクリックします。

状態が、provisioning から active に変われば、Application Load Balancer の作成完了です。


 ↓

ポート2301番のターゲットグループの作成

続いて、ポート2301番で待ち受けするターゲットグループを作成します。

[サービス] → [EC2] → [ターゲットグループ] 画面の「ターゲットグループの作成」をクリック

適当なターゲットグループ名を入力し、ポートを「2301」に変更して「作成」をクリックします。

【補足】ここでは下図の赤枠部分のポート2301番を設定しています。

作成したターゲットグループを選択し、「ターゲット」タブ→「編集」ボタンをクリックします。

ターゲットグループに登録するインスタンスを選択し、ポート「2301」のままで「登録済みに追加」をクリックします。

【補足】ここでは下図の赤枠部分、EC2のポート2301番を指定しています。

「登録されたインスタンス」に、インスタンスが追加されたら、「保存」をクリックします。

以上で、ポート2301番のターゲットグループ完成です。ロードバランサーの振り分け設定がまだこれからなので、状態が unused になっていると思います。

ロードバランサーの振り分け設定

ロードバランサーのポート2301番のリスナーから、ポート2301番のターゲットグループへの振り分けを設定します。

[サービス] → [EC2] → [ロードバランサー] 画面で、作成したロードバランサーを選択し、「リスナー」タブ → 2301番のリスナーの「▶︎」をクリックします。

右の方にスクロールして「編集」をクリックします。

ポート2301番のターゲットグループを選択し、「保存」をクリックします。

[サービス] → [EC2] → [ターゲットグループ] 画面で、ポート2301番のターゲットグループを選択し、「ターゲット」タブをクリック、登録されたインスタンスの状態が「healthy」になっていればOKです。

以上で、Application Load Balancer 複数ポートの設定完了です。ロードバランサーのDNS名で接続して、ポート80番とポート2301番のバーチャルホストに振り分けられていることを確認しましょう。

その他 Application Load Balancer で気にしておきたい設定

セッション維持設定

Application Load Balancer デフォルトの設定では、登録したインスタンスの負荷が均等になるように、負荷分散が行われます。この設定の場合、ページを移動すると別のサーバに接続してしまうことがあり、セッションを維持することができません。

ショッピングサイトなど、セッション維持が必要な場合は、維持設定(スティッキーセッション)を有効にしておくことでこれに対応できます。

維持設定を有効にしたいターゲットグループを選択し、「説明」タブをクリックします。

下の方にスクロールして「属性の編集」をクリックします。

「ロードバランサーによって生成された Cookie の維持を有効化」を選択して「保存」ボタンをクリックすれば、設定完了です。

アイドルタイムアウトの設定

Application Load Balancer のアイドルタイムアウトは、Apache httpd の KeepAliveTimeout に該当するものです。Apache httpd の KeepAliveTimeout のデフォルト値は5秒ですが、Application Load Balancer のアイドルタイムアウトのデフォルト値は60秒と比較的長めに設定されています。
接続のアイドルタイムアウト | AWS Documentation

アイドルタイムアウトを設定したいロードバランサーを選択し、「説明」タブをクリックします。

下の方にスクロールして「属性の編集」をクリックします。

アイドルタイムアウトの値を入力し「保存」ボタンをクリックすれば、設定完了です。

おわりに

冒頭にも書きましたが Application Load Balancer は、これ以外にも魅力的な機能が満載です、機会があれば HTTP/2 サポートあたりを使ってみたいと思います。

(関連記事)「AWS Application Load Balancer の SSL(HTTPSリスナー)設定メモ

コメント

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