AWS ALB を HTTPS リダイレクトサーバ&メンテナンスサーバとして利用する

AWS

AWS の ALB (Application Load Balancer) に新機能がリリースされ、リダイレクトおよび固定レスポンスを返せるようになりました。 ※公式アナウンス

ALB 単体でレスポンスを返せるため、様々な活用法が考えられます。

  • HTTPS へのリダイレクトに使用する
  • メンテナンス時の静的ページを ALB から返す
$ curl -I http://example.yuu26.com/
HTTP/1.1 301 Moved Permanently
Server: awselb/2.0  ←←← ALB 単体でリダイレクトを返却できる!
Location: https://example.yuu26.com:443/

今回は example.yuu26.com でアクセスできる ALB を作成して検証しました。

ALB の HTTPS リダイレクトを設定する

リスナーの設定にある「ルールの表示/編集」から入れます。HTTP: 80 の項目を変更。

ALBの80番リスナー設定を変更

 
画面上の鉛筆マーク、画面左の鉛筆マークとクリックし、編集画面を開きます。
今入っている転送先は不要なので、ゴミ箱マークで削除。

ALBリスナーのルール設定を修正

 
「アクションの追加」→「リダイレクト先」を選べば OK です。
転送先のポート番号は HTTPS なので「443」を入力。チェックマーク→更新 をクリックして保存。

ALBにHTTPS転送設定を追加

 
curl で呼んでみると awselb/2.0 なるサーバでリダイレクトされたことが分かります。

$ curl -I http://example.yuu26.com/
HTTP/1.1 301 Moved Permanently
Server: awselb/2.0
Location: https://example.yuu26.com:443/

ALB をメンテナンスサーバとして利用する

次は、HTTPS のリスナーに固定ページを設定してみます。

「アクションの追加」→「固定レスポンスを返す」を選べば OK です。
任意のレスポンスコード、Content-Type、レスポンス本体の HTML を設定します。

ALBでHTMLの固定HTMLを返す設定

 
上記で設定した内容のレスポンスが返ってくるようになりました。

$ curl --verbose https://example.yuu26.com/
HTTP/2 503
server: awselb/2.0
content-type: text/html; charset=utf-8

<html>
Under maintenance.
</html>

ALBにより固定レスポンスされたHTML

ステータスコードを指定できるため、503 とすることでメンテナンスサーバ代わりになるかもしれません。(現時点では日本語未対応ですが……)

シンプルな HTTPS サーバとして ALB を利用する

HTTPS で特定のレスポンスを返すだけであれば、上記2つを組み合わせて ALB 単体で実現できます。別途 Web サーバを用意する必要がありません。

HTTP リスナーにリダイレクト、HTTPS リスナーに固定レスポンスを設定すれば OK です。

$ curl -LI http://example.yuu26.com/
HTTP/1.1 301 Moved Permanently
Server: awselb/2.0
Location: https://example.yuu26.com:443/

HTTP/2 200
server: awselb/2.0
content-type: text/html; charset=utf-8

まとめ

  • ALB だけでリダイレクトができるようになりました
  • ALB だけで固定レスポンスが返せるようになりました
  • レスポンスコードやリダイレクト先は任意に設定可能です

フル HTTPS 化が広がるなか、リダイレクトを使う機会は増えているように感じます。
Web サーバ側の設定を追記することなく ALB 単体で済むのはとても便利ですね。

前回の記事がさっそく不要になってしまいました。変化が早い。。。