AWS ALBでお手軽メンテ画面の作成と運用方法


はじめに

サービスを運用していると定期メンテの際に出しておくメンテ画面が必要ですよね。
メンテページには「○○時までメンテナンスしているから少し待ってね」的な事を時間を指定して書いておきたい。
基本的な事は クラスメソッドさんのブログ に書いているのですが、
今回は運用も考えてJenkinsから叩けるように aws-cli コマンドを使ってメンテ画面を作って運用する方法を紹介します。

端的に紹介すると

  • ALBのルールの一つにでメンテ画面を作成
    └ メンテ開始前にメンテ画面をaws-cliで更新
  • 運用を考えて3つのルールを作成
    └ メンテ開始時にルールの優先順位をaws-cliで変更
    └ メンテ終了時もルールの優先順位をaws-cliで変更

1.ALBにメンテ画面を作成

EC2やS3不要!ALBだけでメンテナンス画面を表示するなど固定レスポンスが返せるようになりました!

ALBからメンテ画面を固定レスポンスとして作りましょう。
普段はサービスに向けたルールよりも優先度を下に設定しておき、メンテ開始時にメンテ画面のルールの優先度を上げる運用にします。

1.1メンテ開始前にメンテ画面を更新

メンテ画面でメンテの終了予定期間を表示させたいのでルールを更新します。

 $aws elbv2 modify-rule --rule-arn xxxx \
 --actions Type=fixed-response,FixedResponseConfig= \
 '{MessageBody=2019/08/28の20:00までメンテです。,StatusCode=503,ContentType=text/html}'

modify-ruleのdoc

messageBody部分にhtmlを書いてやることでソレっぽい画面を作ります。
ただ、文字制限があるので最低限のページにおさえて置きましょう。

2.運用を考えて3つのルールを作成

1つ目はメンテ画面のルール
2つ目はサービスのターゲットグループを指定したルール
3つ目は 特定IPからアクセス出来るサービスのターゲットグループを指定したルール

メンテナンス時に動作確認を行いたいのであれば、
3つ目のルールを1つ目のルールより優先度を上げると確認が楽になります。

2.1 メンテ開始時にルールの優先順位を変更

メンテ画面の優先度をサービスへのルールよりも上げています。

aws elbv2 set-rule-priorities --rule-priorities \
RuleArn=特定IP許可のルール,Priority=1 \
RuleArn=メンテ画面のルール,Priority=2 \
RuleArn=サービスへのルール,Priority=3

2.2 メンテ終了時にルールの優先順位を変更

メンテ画面の優先度をサービスへのルールよりも下げています。


aws elbv2 set-rule-priorities --rule-priorities \
RuleArn=特定IP許可のルール,Priority=1 \
RuleArn=サービスへのルール,Priority=2 \
RuleArn=メンテ画面のルール,Priority=3 

set-rule-prioritiesのdoc

まとめ

今回、簡単にメンテナンス画面の作成とその運用方法について紹介しました。