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

概要

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 の項目を変更。

f:id:yuu2634:20180808003241p:plain


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


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


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 を設定します。

f:id:yuu2634:20180808005625p:plain


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

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

<html>
Under maintenance.
</html>

f:id:yuu2634:20180808012940p:plain

ステータスコードを指定できるため、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 単体で済むのはとても便利ですね。


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