[AWS] ApplicationLoadBalancer(ALB)とリスナーの設定方法
AWSって使うたびに文言とか、画面とか少しづつ変わってる気がするんですけど。そのせいかロードバランサーの作成とかリスナールール設定手順がわからなくなるのでメモ
Application Load Balancerは、2016年8月にリリースされた新しい種類のElastic Load Balancer
ALB(Application Load Balancer)とは
負荷分散するための機能で、ユーザーはサイトとかにアクセス(リクエストの送信)すると、そのアクセス(リクエスト)はロードバランサーにいく。
リクエストの送信先はいくつかって、ロードバランサーがいい感じに選んで送信してくれる。このおかげで、1箇所にアクセスが集中しないようになっている(と理解している)
ロードバランサーは、クライアントにとって単一の通信先として機能します。クライアントはロードバランサーにリクエストを送信し、ロードバランサーは複数のアベイラビリティーゾーンにあるターゲット (EC2 インスタンスなど) にそれらのリクエストを送信します。
AWSガイド Application Load Balancer
ALBは、レイヤー7のロードバランサーで、HTTP・HTTPSヘッダの中身でどこにリクエストを振り分けるか判断している。
ALBがリリースされる前は、Classic Load Balancer(Elastic Load Balancerの1つ)というのがあった。
ALBを使うと、HTTPの時と、HTTPSリクエストの時とで異なるルールを作ることができる。このおかげで(?)、ワードプレスで作ったサイトのHTTPS化でのトラブルが減った気がする。
ALBの作成手順
EC2 ダッシュボード(EC2画面の左側にあるやつ)から、「ロードバランサー」を選択
「ロードバランサーの作成」をクリック
Application Load Balancerの「作成」をクリック
手順 1: ロードバランサーの設定
基本的な設定 : 名前を入力リスナー : 初期状態ではHTTPしかないので、「リスナーの追加」 ⇨ 「HTTPS(…)」を選択
アベイラビリティーゾーン : 下から2つ以上選択する
「次の手順:セキュリティ設定の構成」をクリック
手順 2: セキュリティ設定の構成
手順 1のリスナーで「HTTPS」を追加すると現れる画面
デフォルトの証明書の選択
ロードバランサーに登録するサイト(ターゲット)の証明書を選択
(証明書がない場合は取得するか、手順 1のリスナーで「HTTPS」を追加しない)
セキュリティポリシーの選択
デフォルトのままでいい
公式ガイドには「一般的な使用には ELBSecurityPolicy-2016-08 ポリシーをお勧めします。」とある
「次の手順:セキュリティグループの設定」をクリック
セキュリティポリシーについて AWSガイド フロントエンド接続に使用するセキュリティポリシーを選択できます。バックエンド接続には、常に ELBSecurityPolicy-2016-08 セキュリティポリシーが使用されます。Application Load Balancer はカスタムセキュリティポリシーをサポートしていません。 Elastic Load Balancing に用意されている Application Load Balancer 用のセキュリティポリシーは次のとおりです。 ELBSecurityPolicy-2016-08 ELBSecurityPolicy-FS-2018-06 ELBSecurityPolicy-TLS-1-2-2017-01 ELBSecurityPolicy-TLS-1-2-Ext-2018-06 ELBSecurityPolicy-TLS-1-1-2017-01 ELBSecurityPolicy-2015-05 ELBSecurityPolicy-TLS-1-0-2015-04 一般的な使用には ELBSecurityPolicy-2016-08 ポリシーをお勧めします。Forward Secrecy (FS) を必要とする場合は、ELBSecurityPolicy-FS-2018-06 ポリシーを使用できます。
手順 3: セキュリティグループの設定
既存のでいいと思う。下のいずれかにチェックを入れる
「次の手順:ルーティングの設定」をクリック
どのルールがいいかは、ロードバランサーのタイプ (インターネット向けまたは内部向け) によって違う
セキュリティグループの推奨ルールはAWSガイドを参照されたし
手順 4: ルーティングの設定
ターゲットグループ
すでにターゲットグループを作成済みなら、ターゲットグループ項目から「既存のターゲットグループ」を選択
未作成なら「新しい〜」を選択
* ここで選択した(または作った)ターゲットグループは、リスナールールのデフォルトとなる
「次の手順:ターゲットの登録」をクリック
手順 5: ターゲットの登録
手順 4のターゲットグループで「新しいターゲットグループ」を選択したので現れる画面
インスタンス
ここからターゲットにしたいインスタンスにチェック ⇨ 「登録済みに追加」クリック
「登録済みに追加」すると登録済みターゲットに選択したインスタンスが現れる
「次の手順:確認」クリック
手順 6: 確認
確認画面が表示される
間違いがなければ「作成」をクリック、間違いがあれば各セクション横の「編集」から修正する
「作成」をクリックすると、この画面になる
リスナールールの変更
新しくALBを作ったらリスナーのルールを変更する
HTTPルール
デフォルトアクションの設定
- 画像[modify listener rule]の①をクリック
- 画面上の「鉛筆マーク」クリック ⇨ [HTTP 80: デフォルトアクション]って書いてある左横の「鉛筆マーク」クリック
- [THEN]のとこの「ゴミ箱マーク」をクリックし、今のルール削除
- 「+ アクションの追加」をクリックし、「リダイレクト先」を選択
- 「カスタムホスト、〜」を選択し、ポートに443を記入
- 画面上の「更新」ボタンクリック
http
でアクセスされた場合、https
にリダイレクトされる
HTTPSルール
デフォルトアクションの設定
- 画像[modify listener rule]の②をクリック
- 「HTTPルール」と同様操作で、現在のルールを削除
- 「固定レスポンスを返す」を選択
- Content-Type : 「
text/plain
」または「text/html
」を選択 - レスポンス本文 : サイトが繋がらない時のメッセージなんかを記入する。例えば「
<h1>メンテナンス中</h1>
」とかここで設定したのはデフォルトアクションのルールで、ターゲットグループ(ターゲットグループに登録したサイトとか)にアクセスしたけど、繋がらない場合デフォルトアクションが適用される。
リダイレクト先や転送先があるなら、「固定レスポンスを返す」を選択する必要はない。目的にあったアクションを設定する。 - 画面上の「更新」ボタンクリック
ターゲットグループの追加
hogeTGを削除してしまったので、追加する。(hogeTGのサイトはHTTPS
化されているものとする)
- 画面上の「+マーク」クリック
- 画面中央の「——- + ルールの挿入 ———」をクリック
- [IF(全て一致)]の「+ 条件を追加する」で「ホストヘッダー…」選択
- サイトURLを記入
- [THEN]の「+ アクションの追加」で「転送先」選択
- 対象のターゲットグループを選択
- 画面上の「保存」ボタンクリック
証明書の追加
新たにターゲットグループを作成し、ターゲットグループの追加を行ったら証明書も追加する。これをしないとHTTPS
接続した時、証明書がないというエラーが発生する
- 画像[modify listener rule]の③をクリック
- 画面上の「+マーク」クリック
- 下に有効な証明書一覧が表示されるので、必要なものにチェックをいれ「追加する」ボタン押す