ALBでメンテナンス画面を出し、一般ユーザーと管理者で表示を切り替える方法

## はじめに
本記事では、サーバーメンテナンス時などにメンテナンスページを表示させる方法として、Application Load Balancer（ALB）を用いた設定手順についてご紹介します。
また、メンテナンス中であっても、一般ユーザーにはメンテナンス画面を表示しつつ、管理者や作業担当者には通常のページを表示できるようにする方法についてもあわせて解説します。

## 構成
![ALB-EC2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/ec9e0af3-d6e4-430b-b250-f23138143374.png)

## 前提
・ALBがあること
・ALBの変更権限があること

## ルールの作成
ルールを作成します。
今回は「メンテンナンスページのルール」と、「指定した送信元からのアクセスを転送するルール」の2つを作成します。

ALBの「リスナーとルール」のタブで「ルールを管理」から「ルールを追加する」を選択します。

![スクリーンショット 2025-04-30 000736.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/951bc433-63b4-4a01-933d-8dc05fd1b1ec.png)

ここでは、以下の設定でメンテナンスページのルールを作成します。
①ルール名：maintenance
　優先度：100
　条件：送信元IP 0.0.0.0/0 ※全てのIPを対象

ルール名(Name)を入力し「条件の追加」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/b607982b-20d8-4757-b296-c61424e672e4.png)
「ルール条件のタイプ」で「送信元IP」を選択し「0.0.0.0/0」と入力し確認を押下します。
次にアクションを選択し「固定レスポンスを返す」にチェックを入れコンテンツタイプを「text/html」を選択します。レスポンス本文に以下のメンテナンスページの設定を入れます。
![スクリーンショット 2025-04-30 000857.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/3adb5ebe-7726-4c7c-ad0a-0c2c22b73e39.png)
※最大1024文字までなので注意してください。
### メンテナンスページの作成
```html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>メンテナンス中</title>
  <style>
    body {
      background-color: #f3f4f6;
      color: #333;
      font-family: 'Segoe UI', sans-serif;
      text-align: center;
      padding: 50px;
    }
    .container {
      max-width: 600px;
      margin: auto;
      background: #fff;
      padding: 40px;
      border-radius: 16px;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
    }
    h1 {
      font-size: 32px;
      margin-bottom: 20px;
    }
    p {
      font-size: 18px;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>メンテナンス中です</h1>
    <p>現在システムメンテナンスを実施しております。<br>
    ご不便をおかけいたしますが、しばらくお待ちください。</p>
  </div>
</body>
</html>

```
リスナーとルールの画面で優先度を「100」とします
![スクリーンショット 2025-04-30 002023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/3dfeec4d-9f23-422e-a68f-b5a421542552.png)

次へを押下し確認と作成画面で内容確認し問題なければ作成を押下します。
すると、すぐにルールが追加されます。
この状態でアクセスすると、このような画面が表示されます。

![メンテナンス画面スクリーンショット 2025-04-05 165848.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/1f6c0d36-7e8e-45ae-89c8-dda5fbe3d4c8.jpeg)

次に許可したいIPのルールを作成します。
設定値は以下とします
②ルール名：my_gip
　優先度：10
　条件：送信元IP ※許可したいIPを入力してください
　転送先ターゲットグループ名：test-target

ルール名と送信元IPを指定する箇所は、先程作成したメンテンナンスページの手順と同じなので割愛します。
※送信元IPの箇所にはアクセスをさせたい送信元IPを指定してください。
※指定するIPが複数ある場合は「新しい値を追加」を押下します

アクションで「ターゲットグループへ転送」を選択し転送させたいターゲットグループを選択します。
ここではtest-targetとします
![スクリーンショット 2025-04-30 002608.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/4c032def-8bbc-4250-9484-538a1f32a85a.png)
リスナーとルールの画面で優先度を先程作成したメンテナンスページの優先度の値「100」よりも小さい数にします。
ここでは「10」としています。
※優先度の値が小さいほうが先に適用されます。
![mygip_スクリーンショット 2025-04-30 002622.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/ba9d6b27-9d90-4070-afbf-f146b0941a3b.png)
内容を確認し作成を押下すると、ルールが作成されます。

この状態でアクセスを試すと、ルール名「my_gip」で指定した送信元IPからのアクセスは転送先のターゲットグループへ、それ以外の送信元のアクセスはメンテナンスページが表示されるようになります。

## まとめ
今回はALBのルール機能を活用し、送信元IP元に応じて表示内容を切り替える構成を実装しました。
サービス提供を一時停止するような場合でも、特定の運用者・関係者からの確認アクセスを許可できるため、便利であると感じました。
また設定も簡単であるため、運用が容易であることも良い点だと感じました。
本記事がメンテンナンス時などにお役に立てれば幸いです。