[AWS] ApplicationLoadBalancer(ALB)とリスナーの設定方法

開発環境系AWS

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画面の左側にあるやつ)から、「ロードバランサー」を選択
「ロードバランサーの作成」をクリック

AWS LoadBalancersPage
AWS LoadBalancersPage
Application Load Balancerの「作成」をクリック
AWS SelectCreateELBWizard
AWS SelectCreateELBWizard

手順 1: ロードバランサーの設定

基本的な設定 : 名前を入力
リスナー : 初期状態ではHTTPしかないので、「リスナーの追加」 ⇨ 「HTTPS(…)」を選択
アベイラビリティーゾーン : 下から2つ以上選択する

「次の手順:セキュリティ設定の構成」をクリック
AWS ALB Step1
AWS ALB Step1

手順 2: セキュリティ設定の構成

手順 1のリスナーで「HTTPS」を追加すると現れる画面

デフォルトの証明書の選択
ロードバランサーに登録するサイト(ターゲット)の証明書を選択
(証明書がない場合は取得するか、手順 1のリスナーで「HTTPS」を追加しない)
セキュリティポリシーの選択
デフォルトのままでいい
公式ガイドには「一般的な使用には ELBSecurityPolicy-2016-08 ポリシーをお勧めします。」とある

「次の手順:セキュリティグループの設定」をクリック

AWS ALB Step2
AWS ALB Step2
セキュリティポリシーについて 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 ALB Step3
AWS ALB Step3
どのルールがいいかは、ロードバランサーのタイプ (インターネット向けまたは内部向け) によって違う
セキュリティグループの推奨ルールはAWSガイドを参照されたし

手順 4: ルーティングの設定

ターゲットグループ
すでにターゲットグループを作成済みなら、ターゲットグループ項目から「既存のターゲットグループ」を選択
未作成なら「新しい〜」を選択
* ここで選択した(または作った)ターゲットグループは、リスナールールのデフォルトとなる

「次の手順:ターゲットの登録」をクリック

AWS ALB Step4
AWS ALB Step4

手順 5: ターゲットの登録

手順 4のターゲットグループで「新しいターゲットグループ」を選択したので現れる画面

インスタンス
ここからターゲットにしたいインスタンスにチェック ⇨ 「登録済みに追加」クリック
「登録済みに追加」すると登録済みターゲットに選択したインスタンスが現れる

「次の手順:確認」クリック

AWS ALB Step5
AWS ALB Step5

手順 6: 確認

確認画面が表示される
間違いがなければ「作成」をクリック、間違いがあれば各セクション横の「編集」から修正する

「作成」をクリックすると、この画面になる

AWS ALB Confirmationpage
AWS ALB Confirmationpage

リスナールールの変更

新しくALBを作ったらリスナーのルールを変更する

modify listener rule
modify listener rule

HTTPルール

デフォルトアクションの設定

  • 画像[modify listener rule]の①をクリック
  • 画面上の「鉛筆マーク」クリック ⇨ [HTTP 80: デフォルトアクション]って書いてある左横の「鉛筆マーク」クリック
  • [THEN]のとこの「ゴミ箱マーク」をクリックし、今のルール削除
  • 「+ アクションの追加」をクリックし、「リダイレクト先」を選択
  • 「カスタムホスト、〜」を選択し、ポートに443を記入
  • 画面上の「更新」ボタンクリック
http listener rule
http listener rule
これでhttpでアクセスされた場合、httpsにリダイレクトされる

HTTPSルール

デフォルトアクションの設定

  • 画像[modify listener rule]の②をクリック
  • 「HTTPルール」と同様操作で、現在のルールを削除
  • 「固定レスポンスを返す」を選択
  • Content-Type : text/plain」または「text/html」を選択
  • レスポンス本文 : サイトが繋がらない時のメッセージなんかを記入する。例えば「<h1>メンテナンス中</h1>」とか
    ここで設定したのはデフォルトアクションのルールで、ターゲットグループ(ターゲットグループに登録したサイトとか)にアクセスしたけど、繋がらない場合デフォルトアクションが適用される。
    リダイレクト先や転送先があるなら、「固定レスポンスを返す」を選択する必要はない。目的にあったアクションを設定する。
  • 画面上の「更新」ボタンクリック
https llstener default action rule
https llstener default action rule

ターゲットグループの追加

hogeTGを削除してしまったので、追加する。(hogeTGのサイトはHTTPS化されているものとする)
  • 画面上の「+マーク」クリック
  • 画面中央の「——- + ルールの挿入 ———」をクリック
  • [IF(全て一致)]の「+ 条件を追加する」で「ホストヘッダー…」選択
  • サイトURLを記入
  • [THEN]の「+ アクションの追加」で「転送先」選択
  • 対象のターゲットグループを選択
  • 画面上の「保存」ボタンクリック
Add targets on https listener
Add targets on https listener
新しくインスタンスを作った時も、ターゲットグループを作成してこの手順(ターゲットグループの追加)で、hogeALBに新ターゲットを登録する。

証明書の追加

新たにターゲットグループを作成し、ターゲットグループの追加を行ったら証明書も追加する。これをしないとHTTPS接続した時、証明書がないというエラーが発生する

  • 画像[modify listener rule]の③をクリック
  • 画面上の「+マーク」クリック
  • 下に有効な証明書一覧が表示されるので、必要なものにチェックをいれ「追加する」ボタン押す
Add Certificates on alb listener
Add Certificates on alb listener

Posted by Agopeanuts