ALBでメンテナンスモードを行う
ALBでメンテナンスモードを試しにやってみました。
AWS構成図
踏み台とか余計なものまで作成しましたが、本記事で取り扱うのはオレンジ枠の部分のみです。
terraformソースコード
やってみる
まずはALBのDNS名をブラウザで開いて、Apacheのページが表示されることを確認しておきます(TestPageなのは気にせず、、)。
次にAWSコンソールから
ALB>リスナー>ルールの表示/編集
を選択します。
上部にある+ボタンを押すとルールが追加されます。
パスに *
ですべてのパスにルールを適用し、固定レスポンスのapplication/jsonで以下のメッセージを返すように設定し、保存ボタンを押します。
{
"message": "メンテナンス中です。"
}
数秒待ってALBのDNS名をブラウザで開いてみると、先程設定したメッセージが表示されます。
curlに -iオプション
をつけて実行してみるとステータスコードが503になっていることが分かります。
$ curl -i [ALBのDNS名]
HTTP/1.1 503 Service Temporarily Unavailable
Server: awselb/2.0
Date: Fri, 05 Aug 2022 00:20:25 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 51
Connection: keep-alive
{
"message": "メンテナンス中です。"
}
特定IPの場合のみアクセスを許可する
"メンテナンス中です。"
というルールの上に新規ルールを追加します。送信元IPでアクセス許可したいIPを記述します。
許可したIPでアクセスすると、Apacheのページが返ってきます。
特定ヘッダーの場合のみアクセスを許可する
先程追加した、IP許可のルールは削除し、"メンテナンス中です。"
というルールの上に新規ルールを追加します。HTTP ヘッダー X-Allow-Test-Key がallowの場合のみEC2にアクセスします。
ヘッダーなしだと固定レスポンスが返ってきます。
$ curl -i [ALBのDNS名]
HTTP/1.1 503 Service Temporarily Unavailable
Server: awselb/2.0
Date: Fri, 05 Aug 2022 00:26:19 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 51
Connection: keep-alive
{
"message": "メンテナンス中です。"
}
ヘッダーを設定するとApacheのページが返ってきます。
$ curl -i -H "X-Allow-Test-Key:allow" [ALBのDNS名]
HTTP/1.1 403 Forbidden
Date: Fri, 05 Aug 2022 00:26:36 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 3630
Connection: keep-alive
Server: Apache/2.4.54 ()
(省略)
...
Terraformで作成した感想
今回はALBのメンテ検証したかっただけなので、若干サボりました。
private subnetのEC2からyum updateできなくてNat Gatewayが必要なことに気づき、
Nat Gatewayはpublic subnetに配置するけど、private subnetのroute tableに紐付けが必要なところで躓きました。
Discussion