AWSでプロダクション環境をメンテナンスするときに、一時的にメンテナンスページを表示する方法です。ここでは、ELBとEC2をつかったやりかたを紹介します。ここで紹介する方法の他にもRoute53とS3を組み合わせて、自動でDNSフェイルオーバーすることで、メンテナンスページを出す方法もありますが、「AWS ソーリーページ Route53 S3」などで検索するとたくさん情報があるので、サーバレスのソーリーページの実現方法はそちらに譲りたいと思います。
ここで紹介するEC2でメンテナンスページを出す方法としては、
- メンテナンスに入る前に、ELBからアプリケーションサーバを切り離し、
- それと同時に、ELBにソーリーサーバを繋ぐ
という手動運用で行われる計画停止を前提としています。
ソーリーサーバの構築
AWS公式のUbuntu AMIから適当に1台、EC2のインスタンスを起動します。つぎに、nginxをインストールします。
apt-get install nginx
ソーリーサーバのファイル構成
ファイル構成としては、必要最低限にするのがポイント。ファイルが見つからなかったら、503レスポンスを返すため。
/usr/share/nginx/html
├── ping.html ... ELBのヘルスチェック用ファイル。200レスポンスを返す必要がある
└── maintenance.html ... メンテナンス中のソーリーページ。どんなURLにアクセスしてもこのページを出すようにする
ソーリーサーバのnginxの設定
デフォルトのサイト設定 /etc/nginx/sites-enabled/default
を3箇所書き換えます。
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
try_files $uri @maintenance; # ここ!
}
# ここ!
location @maintenance {
return 503;
}
# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
#location /RequestDenied {
# proxy_pass http://127.0.0.1:8080;
#}
# error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# ここ!
error_page 503 /maintenance.html;
location = /maintenance.html {
root /usr/share/nginx/html;
}
...以下はデフォルトのまま
以上でソーリーサーバの構築は完了です。