ALBとCloudFrontを使った環境でのメンテナンス業務をやってみた。by駆け出しエンジニア

# はじめに

先日業務でメンテナンス画面を表示して、その間にメンテナンス作業をするタスクをすることになりました。どのようにこのタスクを行ったのかを記して、自分への備忘録として、かつ、同じようなタスクを与えられたエンジニアへ向けて参考になればと思い、投稿させていただきます。

# やりたいこと

一般のユーザーにはメンテナンス画面を表示する。

一方でメンテナンス作業をするエンジニアにはアプリの機能を通常通り操作できるようにする。

# 環境

AWSのALBとCloudFrontを使用している。

# 作業手順

## 1. 準備

まずは、準備としてメンテナンス作業を行うエンジニアの環境のグローバルIPアドレスを調べましょう。

以下のサイトにアクセスすると確認できます。

[https://www.cman.jp/network/support/go_access.cgi](https://www.cman.jp/network/support/go_access.cgi)

![スクリーン ショット 2023-03-04 に 13.28.39 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517030/7c2c9d83-fcb0-03f5-35e4-8a869e4eb9ef.png)

## 2. ALBの設定

AWSコンソールからログインをしてロードバランサーの設定画面でリスナーの設定をしましょう。

作業手順は以下のように行います。

### ルールを編集画面へ

![スクリーン ショット 2023-03-04 に 13.18.37 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517030/834b4a5c-1b5f-67e7-f7e5-077e8a24e344.png)


### ルールを挿入する

1. ヘッダーの＋ボタンをクリックする 
2. ルールを追加したい位置の「ルール挿入」をクリックする（ルールは順番に上から適応されるので注意）

![スクリーン ショット 2023-03-04 に 14.20.15 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517030/976a634d-3d8c-1c46-a3cb-570d38c6ba2a.png)


### 全てのパスからのアクセスをメンテナンス画面に遷移させるようにする

1. 条件の追加をクリックして「パス…」を選択する
2. パスに*を指定して設定する（*は「すべて」を意味する）
3. アクションの追加をクリックして「固定レスポンスを返す…」を選択する
4. レスポンス本文に一般ユーザーに表示させたい画面のデータを入れる

※今回は「メンテナンス中です。」と文字しか入れてませんが、制限はありますが、凝ったHTMLを入れることも可能です。（https://blog.serverworks.co.jp/alb-fixed-response）

![スクリーン ショット 2023-02-26 に 21.03.16 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517030/2334f7ff-aad3-437c-8a7e-17b28db10a82.png)


### 作業をする環境のIPアドレスからのアクセス時のみ、サーバーにアクセスするようにする

1. 条件の追加から「HTTPヘッダー…」を選択する
2. HTTPヘッダーに「X-forwarded-for」と入力して、値にメンテナンスする環境のグローバルIPアドレスを入力する。
    
    X-forwarded-forとは？（[https://www.infraexpert.com/study/loadbalancer11.html](https://www.infraexpert.com/study/loadbalancer11.html)）
    
    ```ruby
    ◆　XFF（ X-Forwarded-For ）とは
    
    　X-Forwarded-Forとは、HTTPヘッダフィールドの1つであり、ロードバランサなどの機器を経由して
    　Webサーバに接続するクライアントの送信元IPアドレスを特定する際のデファクトスタンダードです。
    　クライアントの送信元IPアドレスの特定は、ロードバランサなどでクライアントの送信元IPアドレスが
    　変換された場合でも、HTTPヘッダに元のクライアントIPアドレスの情報を付加することで実現します。
    ```
    
3. アクションの追加で「転送先…」を選択する
4. メンテナンス作業をしたいターゲットグループを選択する

![スクリーン ショット 2023-02-26 に 20.58.10 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517030/265779b8-211e-0ad6-252b-6e2d3363f2cf.png)


## ルールの順番を確認して保存する

- 順番を確認して保存する
    1. IPアドレスが指定したものか判定
    2. 指定したものでなければメンテナンス画面へ
    3. ルールを保存

![スクリーン ショット 2023-02-26 に 20.56.02 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517030/db486ded-30e6-90cb-983c-64717aa152e6.png)

## 3. 動作確認

1. 許可されていないIPアドレスで入る
    
   ![スクリーン ショット 2023-03-04 に 13.29.30 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517030/877cf965-a9ed-d504-26e8-0b75d413658f.png)

    
2. 許可されたIPアドレスで入ると通常のサーバーの画面が表示される。（画面は割愛させていただきます。）
3. 作業が終わったらルールを削除してください。これにて終了です。

## 4. さいごに

他の手段もあるようですが、この方法は簡単ではないかと思います。

複雑な画面を表示しないのであれば参考にしていただければと思います。

またこちらの記事は私の初めての投稿でできるだけ駆け出しでもパニックを起こさないように少ない文字数で作成してみました。なので至らぬ点もあるかもしれません。その際はコメントいただけると今後に繋がりますのでご指摘いただければと思います。

## 参考記事
## ALBでのメンテナンス画面の表示
- [[新機能]EC2やS3不要！ALBだけでメンテナンス画面を表示するなど固定レスポンスが返せるようになりました！](https://dev.classmethod.jp/articles/alb-fixed-response/)
- [メンテナンスモードをALBだけで実現するCloudFormation Template](https://qiita.com/mizue/items/8e97e7f4502da5612334)
- [ALBの固定レスポンスには最大1024文字のHTML・CSSを含められる](https://blog.serverworks.co.jp/alb-fixed-response)
## パスについて
- [パス名について（https://www.tohoho-web.com/ex/draft/path.htm）](https://www.tohoho-web.com/ex/draft/path.htm#:~:text=%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E3%81%B2%E3%81%A8%E3%81%A4%E3%80%81%E3%82%A2%E3%82%B9%E3%82%BF%E3%83%AA%E3%82%B9%E3%82%AF,%E3%83%BB%E3%80%8D%E3%82%92%E6%84%8F%E5%91%B3%E3%81%97%E3%81%BE%E3%81%99%E3%80%82&text=%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%81%E3%83%A7%E3%83%B3%EF%BC%88%3F%EF%BC%89,%E6%AC%A1%E3%81%AE%E4%BE%8B%E3%81%AF%E3%80%81fileAA)

## X-forwarded-for
- [XFF （ X-Forwarded-For ）](https://www.infraexpert.com/study/loadbalancer11.html)