サイト障害を検知して復旧する

AWSBeginner
オンラインで実践に進む

はじめに

実際のエラーで CloudWatch アラームを発火させ、設定修復後にサイトと OK 状態を確認します。

先に前段のポートフォリオラボを完了してください。この環境は必要な前段機能と独自のリソースを提供します。以前のインスタンス、ファイル、認証情報ではなく知識を引き継ぎます。

認定試験との関連

認定 タスク 練習内容
AWS Certified Cloud Practitioner (CLF-C02) Task 3.8 メトリクスとアラームで障害と復旧を観察する。

ラボの概要

実際のエラーで CloudWatch アラームを発火させ、設定修復後にサイトと OK 状態を確認します。

エラーのアラームを作成する

このステップでは、 ログは個々の出来事、メトリクスは数値、アラームは条件を継続評価します。アプリは失敗なら Errors=1、成功なら 0 を送信します。通知や自動修復は設定しません。 この Errors 指標は /website のページリクエストだけを測ります。画像などのファイルは別のログイベントを作ります。

フォルダーへ移動します。

cd /home/labex/project

環境識別子を読みます。

source website.env
echo "$INSTANCE_ID"

設定を読みます。Namespace は系列の分類、Application=portfolio は次元でこのアプリを選びます。高解像度メトリクスを 10 秒ごとに Sum で評価し、0 超で ALARM になります。

cat website-alarm.json

JSON ファイルでアラームを作ります。

aws cloudwatch put-metric-alarm --cli-input-json file://website-alarm.json

状態を読みます。

aws cloudwatch describe-alarms --alarm-names portfolio-errors

最初は INSUFFICIENT_DATA があり得ます。TreatMissingData=missing はデータなしを成功と扱いません。アラーム自体は故障を修復しません。

実際の障害を検知する

このステップでは、 提供された壊れた JSON を公開して障害を作ります。

壊れた内容を読みます。

cat profile-broken.json

SCP でプロフィールを上書きします。

scp -F ssh_config profile-broken.json ubuntu@"$PUBLIC_IP":/home/ubuntu/portfolio/profile.json

サイトを更新して Website unavailable を見てから 503 のログを読みます。精確な短語を引用符で指定します。

aws logs filter-log-events --log-group-name "$LOG_GROUP" --filter-pattern '"status=503"'

10 秒程度の評価期間を待ち、ページを再読み込みして状態を読みます。

aws cloudwatch describe-alarms --alarm-names portfolio-errors

実際の /website status=503 と ALARM を確認します。SSH とインスタンスは動いていてもアプリは失敗します。手動の状態変更は使いません。

実際のラボの確認例です。リソース ID は環境によって異なります。

サイトを修復して回復を確認する

このステップでは、 有効なプロフィールを公開し、アプリと監視をそれぞれ確認します。

正常ファイルを読みます。

cat profile-working.json

SCP で復元します。

scp -F ssh_config profile-working.json ubuntu@"$PUBLIC_IP":/home/ubuntu/portfolio/profile.json

サイトを更新して Alex Morgan と画像を確認したあと、200 のログを読みます。

aws logs filter-log-events --log-group-name "$LOG_GROUP" --filter-pattern '"status=200"'

新しい成功だけの評価期間を待ち、再読み込みして状態を読みます。

aws cloudwatch describe-alarms --alarm-names portfolio-errors

古い 503 が履歴に残っていても、新しい /website status=200 と OK が復旧を示します。データなしの状態は OK の代わりになりません。

実際のラボの確認例です。リソース ID は環境によって異なります。

演習監視とサイトを削除する

このステップでは、 指定された演習リソースだけを削除します。

インスタンスを終了します。

aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"

終了を待ちます。

aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"

portfolio-errors アラームを削除します。

aws cloudwatch delete-alarms --alarm-names portfolio-errors

演習ロググループを削除します。

aws logs delete-log-group --log-group-name "$LOG_GROUP"

準備済みバケット、画像、ロール、参照ログとネットワークを保持します。

まとめ

実際の 503 で ALARM を確認し、プロフィール修復後に 200 と OK を確認して演習リソースを削除しました。

公式ドキュメント: CloudWatch alarms, high-resolution custom metrics.