CloudWatch アラーム + SNS 通知ハンズオン

EC2/RDS のメトリクスを監視し、閾値超過を SNS でメール通知する基本の監視を構築する

Amazon CloudWatch Amazon SNS Amazon EC2 マネコン操作 入門〜中級 所要時間 45〜60 分 v1.0

📋 概要

このハンズオンでは、Amazon CloudWatch アラームを使って EC2 インスタンスの CPU 使用率やステータスチェックを監視し、異常を検知したら Amazon SNS でメール通知する仕組みを構築します。システム監視の最も基本的かつ重要なパターンです。最後に簡単なダッシュボードでメトリクスを可視化します。

項目内容
所要時間45〜60 分
難易度入門〜中級
主要サービスCloudWatch(アラーム・ダッシュボード)、SNS、EC2
前提リソース稼働中の EC2 インスタンス 1 台以上
課金目安アラーム: $0.10/個/月、標準メトリクスは無料。ほぼ無料で実施可能
ℹ️ CloudWatch アラームの 3 つの状態
状態意味
OKメトリクスが閾値の範囲内(正常)
ALARMメトリクスが閾値を超過(異常)→ アクション実行
INSUFFICIENT_DATAデータ不足で評価不能(インスタンス停止中など)

🏗️ 構成図

🖥️ EC2 インスタンス(CPU・ステータスチェックのメトリクスを自動送信)
↓ メトリクス収集(5 分間隔 / 詳細モニタリング時 1 分)
📊 Amazon CloudWatch
アラーム: CPUUtilization > 70% / StatusCheckFailed >= 1
↓ ALARM 状態でアクション実行
📣 Amazon SNS(トピック: handson-alarm-topic)
↓ サブスクリプション
📧 メール通知

✅ 前提条件

ℹ️ 標準モニタリングと詳細モニタリング

EC2 のデフォルトは「標準モニタリング」で 5 分間隔のメトリクスです。1 分間隔で監視したい場合は EC2 の「詳細モニタリング」を有効化します(追加料金あり)。このハンズオンは標準モニタリングのままで実施できます。

🔧 ステップ 1: SNS トピックとサブスクリプションの作成

アラーム発火時に通知を送る先となる SNS トピックを作成します。

1-1. SNS トピックの作成

手順
  1. AWS コンソールで「SNS」を検索して開く
  2. 左メニュー → 「トピック」→「トピックの作成」
  3. タイプ: スタンダード
  4. 名前: handson-alarm-topic
  5. その他はデフォルト → 「トピックの作成」

1-2. メールサブスクリプションの追加

手順
  1. 作成したトピック → 「サブスクリプションの作成」
  2. プロトコル: Eメール
  3. エンドポイント: 通知先メールアドレスを入力
  4. 「サブスクリプションの作成」
  5. 受信した確認メールの 「Confirm subscription」 リンクをクリック
⚠️ サブスクリプションの確認が必須

「Confirm subscription」をクリックするまでステータスは「保留中の確認」のままで通知は届きません。確認メールが届かない場合は迷惑メールフォルダを確認してください。

🔧 ステップ 2: CPU 使用率アラームの作成

2-1. CloudWatch でアラームを作成

手順
  1. AWS コンソールで「CloudWatch」を検索して開く
  2. 左メニュー → 「すべてのアラーム」→「アラームの作成」
  3. 「メトリクスの選択」をクリック
  4. 「EC2」→「インスタンス別メトリクス」を選択
  5. 対象インスタンスの CPUUtilization にチェック → 「メトリクスの選択」

2-2. メトリクスと条件の設定

設定値
統計
平均値
期間
5 分
しきい値の種類
静的
条件
より大きい(>)70
アラームを実行するデータポイント
2 / 2(連続 2 回超過で発火)
欠落データの処理
欠落として処理
ℹ️ 「2 / 2」の意味

「2 のうち 2 のデータポイント」= 5 分間隔の評価が連続 2 回(= 10 分間)閾値を超えたらアラームを発火します。一時的なスパイクで誤検知しないための設定です。

2-3. アクション(通知先)の設定

手順
  1. 「次へ」でアクション設定へ進む
  2. アラーム状態トリガー: アラーム状態(In alarm)
  3. SNS トピック: 「既存の SNS トピックを選択」→ handson-alarm-topic
  4. 「次へ」

2-4. 名前と説明

アラーム名
handson-ec2-cpu-high
説明
EC2 CPU 使用率が 70% を超過

「次へ」→ プレビューを確認 →「アラームの作成」をクリックします。

🔧 ステップ 3: ステータスチェックアラームの作成

EC2 のシステム障害・インスタンス障害を検知するアラームを追加します。

手順
  1. CloudWatch → 「アラームの作成」→「メトリクスの選択」
  2. 「EC2」→「インスタンス別メトリクス」
  3. 対象インスタンスの StatusCheckFailed を選択 → 「メトリクスの選択」
設定値
統計
最大値
期間
1 分
条件
以上(>=)1
データポイント
1 / 1
SNS トピック
handson-alarm-topic
アラーム名
handson-ec2-status-check
ℹ️ StatusCheckFailed の種類
メトリクス意味
StatusCheckFailed_SystemAWS 側のハードウェア障害(インスタンスの再起動で復旧する場合が多い)
StatusCheckFailed_InstanceOS・ネットワーク設定など、インスタンス内部の問題
StatusCheckFailed上記いずれかが失敗した場合に 1 になる(合算)

🔧 ステップ 4: アラームの動作テスト

実際に CPU を上げずに、AWS CLI または コンソールでアラーム状態を手動変更してテストします。

4-1. set-alarm-state で強制的に ALARM にする

AWS CloudShell または CLI で以下を実行します(CloudShell はコンソール右上のターミナルアイコンから起動)。

aws cloudwatch set-alarm-state \ --alarm-name handson-ec2-cpu-high \ --state-value ALARM \ --state-reason "手動テスト: アラーム動作確認"
✅ 期待結果

数秒〜数十秒以内に登録したメールアドレスへ「ALARM: handson-ec2-cpu-high」という件名の通知メールが届きます。

4-2. OK 状態に戻す

aws cloudwatch set-alarm-state \ --alarm-name handson-ec2-cpu-high \ --state-value OK \ --state-reason "手動テスト: 復旧確認"

「OK: handson-ec2-cpu-high」という復旧通知メールが届きます。

ℹ️ 実際の負荷でテストする場合

EC2 にログインして stress --cpu $(nproc) --timeout 700 を実行すれば、実際の CPU 負荷でアラームを発火させられます(sudo dnf install -y stress でインストール)。10 分程度負荷をかけ続けると ALARM になります。

4-3. アラーム履歴の確認

手順
  1. CloudWatch → アラーム → handson-ec2-cpu-high をクリック
  2. 「履歴」タブで状態遷移(OK → ALARM → OK)のログが時系列で確認できる

🔧 ステップ 5: ダッシュボードでの可視化

監視対象のメトリクスを 1 画面にまとめたダッシュボードを作成します。

5-1. ダッシュボードの作成

手順
  1. CloudWatch → 左メニュー「ダッシュボード」→「ダッシュボードの作成」
  2. 名前: handson-dashboard → 「ダッシュボードの作成」
  3. ウィジェットタイプ: 「線」 を選択 → 「次へ」
  4. 「メトリクス」→「EC2」→「インスタンス別メトリクス」→ CPUUtilization を選択 → 「ウィジェットの作成」

5-2. ウィジェットの追加

手順
  1. 右上「+ ウィジェットの追加」で複数のメトリクスを追加できる
  2. 例: NetworkIn / NetworkOut、StatusCheckFailed、(RDS があれば)DatabaseConnections / FreeStorageSpace
  3. 右上「保存」でダッシュボードを保存
✅ 確認

1 つの画面で複数メトリクスの推移を一覧できれば完成です。時間範囲(右上)を「1h」「3h」「1d」などに切り替えて推移を確認しましょう。

ℹ️ アラームウィジェットの追加

ウィジェット追加時に「アラームステータス」タイプを選ぶと、作成した 2 つのアラームの現在状態(OK/ALARM)を一覧表示できます。運用ダッシュボードとして便利です。

🧹 クリーンアップ

⚠️ 課金注意

アラームは 1 個あたり月額 $0.10 の課金が発生します。ハンズオン完了後は削除してください。ダッシュボードは 3 個まで無料です。

削除手順

  1. アラームの削除
    CloudWatch → アラーム → handson-ec2-cpu-high と handson-ec2-status-check を選択 → 「アクション」→「削除」
  2. ダッシュボードの削除
    CloudWatch → ダッシュボード → handson-dashboard を選択 → 「削除」
  3. SNS サブスクリプションとトピックの削除
    SNS → サブスクリプション → 該当を削除 → トピック → handson-alarm-topic を削除
✅ 削除確認

CloudWatch のアラーム一覧と SNS のトピック一覧から該当リソースが消えていれば完了です。