23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Nginx + ELB(Elastic Load Balancing)でサービスをソーリーページ(メンテナンスモード)に切り替える

Last updated at Posted at 2014-12-29

はじめに

Nginx、ELBに関して説明は端折りますが、概要を知りたい方は以下が参考になるかと思います。

本記事の前提条件

  • ELB + EC2(WEB/AP)の構成を組んでいること
  • Nginxをインストール済のEC2インスタンス (ソーリーサーバ用)が用意してあること

Nginxのコンフィグ設定

色々と試行錯誤して以下に落ち着きました

server {
  listen 80;
  root /var/www;

  location = /healthcheck {
    empty_gif;
    access_log off;
    break;
  }

  # ELBからのhealthcheckは通す
  set $sorry true;
  if ($request_uri = "/healthcheck") {
    set $sorry false;
  }

  error_page 503 @sorry;
  location @sorry {
    rewrite ^(.*)$ /sorry.html break;
  }

  if ($sorry = true) {
    return 503;
  }
}

※ ドキュメントルート、URIの部分は適宜読み替えてください

実施

Nginxを起動(もしくはリロード)する

$ sudo service nginx start
OR
$ sudo service nginx reload

ELBの付け替えをする

これを...
sorryserver_before.png

こうします
sorryserver_after.png

この時の注意点なのですが、ELBは切り替え後サービスインするまでに数分かかるので、以下の順序で実施するとよいでしょう。

  1. SorryサーバをELBにぶら下げる
  2. Sorryサーバのステータスが Out of Service -> In Sercice になることを確認する
  3. WEB/APサーバをELBからはずす

これでどのURLを叩かれてもソーリーページが開き、HTTPのステータスコードも 503 で返るはずです。

付け替えの方法は、 マネジメントコンソール OR CLI OR SDKのいずれかになるかと思います。マネジメントコンソールからの操作は以下の動画が参考になるかと思います。

Introduction to Elastic Load Balancing

マネジメントコンソールは便利なのですが、手続きが少し多いので、ヒューマンエラーを減らすためにもできるだけCLIやSDKを利用してコマンド一発で切り替えられるようにしておきたいですね。(ChatOpsを取り入れている会社であればBOTにお願いするのが今風かもですね:thumbsup:)

さいごに

S3のWebホスティング利用して、Route53で切り替えじゃダメなの?

個人的にはステータスコードを503で返したいのでナシですが、ステータスコードが200で返っても問題ないのであればアリだと思います。その場合は以下のクラスメソッドさんの記事が参考になるかと思います。

[Amazon Route 53のDNSフェイルオーバー機能を利用したリージョンを跨いだバックアップサイトの構築(EC2 to S3編)]
(http://dev.classmethod.jp/cloud/route-53-dns-failover-s3/)

23
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?