4
3

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.

メンテナンスモードをALBだけで実現するCloudFormation Template

Last updated at Posted at 2019-06-24

やりたいこと

サービスのメンテナンスモードをロードバランサーの切り替えだけで実現したい。

環境

  • AWSでALBを使っている

やり方

  • ALBのリスナールールに設定する。

こちらをやります。(クラスメソッドさんありがとう)
https://dev.classmethod.jp/cloud/aws/alb-fixed-response/

  • メンテナンス中は、HTTPステータス503、レスポンスbodyにjsonを出力する。

ALBは正しく設定されている前提で必要な部分のみ抜粋して掲載します。


AWSTemplateFormatVersion: '2010-09-09'
Description: ・・・・
Resources:

(省略)

  # 通常パターンのリスナールール
  ALBListenerRule:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    DependsOn: ALBListener
    Properties:
      Actions:
        - Type: forward
          TargetGroupArn: !Ref 'ALBTarget'
      Conditions:
        - Field: path-pattern
          Values:
            - '*'
      ListenerArn: !Ref 'ALBListener'
      Priority: 1
 # メンテナンスモードのリスナールール
  ALBListenerRule503:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    DependsOn: ALBListener
    Properties:
      Actions:
        - Type: fixed-response
          FixedResponseConfig:
            ContentType: 'application/json'
            MessageBody: |
              {
                "error_message": "メンテナンス中です。"
              }
            StatusCode: 503
      Conditions:
        - Field: path-pattern
          Values:
            - '*'
      ListenerArn: !Ref 'ALBListener'
      Priority: 2
:
(以下省略)

通常は、ALBのターゲットにforwardするが、メンテナンス中はバックのシステムに飛ばさず、固定のJSONを出すため、 Actions の Type に fixed-response を指定する。
固定でだすステータスや JSONのデータは、FixedResponseConfig に指定する。

実際にメンテナンスモードにする場合は、AWSマネージメントコンソールにログインし、ALB リスナールールの画面を開き、優先順位を503のルールが優先順位1位になるように変更する。

今回は固定のJSONを出力したけど、画面を出したい場合はHTMLを設定することも可能。

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?