ALB を利用して固定ページを表示してみよう

こんにちは。米須です。
今日は ALB の「固定レスポンスアクション」を利用した Sorry ページの表示についてお話したいと思います。

経緯

先日、「コスト削減のために夜間はサーバを停止したいんだけど、いい方法ある?」という相談をもらいました。単純に CloudWatch Events とか AutoScalling のスケジュールを使ってサーバの起動・停止をすればいいんでしょ?と軽く考えていたのですが、よくよく考えるとサーバ停止中にアクセスしてきたユーザにはエラーメッセージが見えちゃうな・・・と(^^; そこで、サーバ停止中でもユーザにアナウンスページを見せるための方法を探し始めました。

最初に思いついたのは「Route53 のフェイルオーバールーティング+CloudFront+S3による静的ページの表示」でした。ただ、利用環境を確認してみると、サーバ自体は AWS にあるものの、DNS は AWS を利用しておらずフェールオーバールーティングができないため、あえなく却下。。。

他に使えそうな方法はないか探していたところ、ALB でも固定ページを表示できることが分かり、検証してみることにしました。

設定方法

公式ドキュメントの記載はこちらです。あまり細かいことは書いていないんですよね(^^;

[AWS ドキュメント]
固定レスポンスアクション
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-listeners.html#fixed-response-actions

では、手順をひとつずつ見ていきたいと思います。(今回は、固定レスポンスの設定をメインにしているため、ALB 作成の手順については省略しています。ご了承ください)

まず、ALB のルール設定画面を開きます。Web サーバを表示するための最低限の設定しかしていない状態です。

ALB

固定レスポンス用のルールを追加するため、メニューにある+に丸印のボタンを押し、画面真ん中に出てきた「ルールの挿入」を押します。

そうすると、下記のように新しいルールを設定するための画面が表示されるので、「IF」のところにある「条件の追加」を押して「パス」を選択します。

今回は、サーバ停止時にアクセスしてきたすべての人にページを表示したいので、パスに「*」を設定しています。

ここから固定レスポンスを設定していきます。
「THEN」のところにある「アクションの追加」を押し、「固定レスポンスを返す」を選択します。

ALB

Content-Type から「text/html」を選択します。

ALB

レスポンス本文にHTMLを書いてみます。img タグとか table タグも使えるので、Sorry ページを作るには十分かなと思います。HTMLが書けたら、右上の「保存」ボタンを押します。

ALB

では、ALBの DNS名でアクセスしてみましょう

ALB

こんな感じで表示されました。
この方法なら ALB だけで実現でき、他の方法に比べてコストもかからないので結構使えそうな気がします。

ALB

制約事項

どのくらいのHTMLが書けるのか気になったので試してみたところ、レスポンス本文は1024文字までのようです。表示したい内容が多い場合は、画像にして取り込むなどの工夫が必要そうです。
(それにしても、試し方が雑ですね(^^;))

ALB

さいごに

今回の説明した方法で固定ページの表示ができることは分かりましたが、このままだとずっとこのページが表示されてしまいます。サービス時間内/サービス時間外でページを切り替えるための設定について次回お話したいと思います。

AWSELB

Posted by komesu