SNSからアラートメールを送信
EC2のCPU使用率をAWSのSNS機能を使って送信してみました。
ステップ1: EC2用のIAM Roleを作成する
-
IAM
→ロール
→ロールを作成
をクリックする
-
AWSのサービス
をクリックして、ユースケース
にEC2
を選択する
-
AmazonSSMFullAccess
を選択する
-
AmazonSNSFullAccess
を選択した上、次へ
をクリックする
-
ロール名
に名前を入力の上、作成する
- ロールが作成されたことを確認することができた
ステップ2: EC2を作成する
-
EC2
→インスタンスを起動
をクリックする
- 名前とタグ:
vpn-server
- アプリケーションおよびOSイメージ:
Amazon Linux 2
- ネットワーク設定
- VPC: 既存のVPCを選択する
- Subnet: 任意のPublic Subnetを選択する
- パブリックIPの自動割り当て:
有効化
にする - セキュリティグループ:
セキュリティグループを作成する
をチェック→セキュリティグループ名
と説明
にバリューを入れる - セッションマネージャーを用いてログインするため、インバンドルールが不用
- キーペア(ログイン): デフォルト値の
キーペアなしで続行
を選択する
※ EC2のSSMFullAccessのセッションマネージャー機能を用いてログインするため、キー認証ではキーペアなしで続行
を選択する
- 高度なネットワーク設定
※ 下記の図のようにデフォルト値のままにする
- ストレージを設定
※ 下記の図のようにデフォルト値のままにする - 高度な詳細
- IAMインスタンスプロフィール: 上記ステップ1で作られたIAMロールを選択する
※ 他の設定は下記の図のようにデフォルト値のままにする
- IAMインスタンスプロフィール: 上記ステップ1で作られたIAMロールを選択する
- EC2インスタンスが作成されたことを確認することができた
ステップ3: SNSトピックを作成する
-
Amazon SNS
→トピック
→トピックの作成
をクリックする
- トピックの作成
- タイプ:
スタンダード
にチェックを入れる - 名前: 任意の内容を入れる
- 表示名: 任意の内容を入れる
- 他の設定はデフォルトのままにする
- タイプ:
- トピックが作成されたことを確認する
ステップ4: サブスクリプションを作成する
-
Amazon SNS
→トピック
→サブスクリプションの作成
をクリックする - 詳細
- トピック ARN: 上記のステップ3で作成したトピックを選択する
- プロトコル:
Eメール
を選択する - エンドポイント: 送信先のEメールアドレスを入力する
- 他の設定はデフォルトのままにする
-
サブスクリプションの作成
をクリックする
- 上記に登録したEメールアドレスに確認メールが届くので、その
Confirm subscription
リンクを押下し、Subscription Confirmed!
という文言が表示されればOK
ステップ5: EC2にCPU使用率をSNS経由で知らせる
-
セッションマネージャー
を使ってインスタンスに接続する
- Root userに切り替える
- AWS Cliの場所を確認する
which aws
- 以下のスクリプトを実装する
-
--topic-arn
に上記が生成されたARNを入れ替えてください
-
#!/bin/bash
CPU_us=$(vmstat | awk '{print $13}' | sed -n '$p')
CPU_sy=$(vmstat | awk '{print $14}' | sed -n '$p')
CPU_id=$(vmstat | awk '{print $15}' | sed -n '$p')
CPU_wa=$(vmstat | awk '{print $16}' | sed -n '$p')
CPU_st=$(vmstat | awk '{print $17}' | sed -n '$p')
CPU1=`cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
sleep 5
CPU2=`cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
IDLE1=`echo $CPU1 | awk '{print $4}'`
IDLE2=`echo $CPU2 | awk '{print $4}'`
CPU1_TOTAL=`echo $CPU1 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
CPU2_TOTAL=`echo $CPU2 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
IDLE=`echo "$IDLE2-$IDLE1" | bc`
CPU_TOTAL=`echo "$CPU2_TOTAL-$CPU1_TOTAL" | bc`
RATE=`echo "scale=4;($CPU_TOTAL-$IDLE)/$CPU_TOTAL*100" | bc | awk '{printf "%.2f",$1}'`
echo "CPU_RATE:${RATE}%"
CPU_RATE=`echo $RATE | cut -d. -f1`
/usr/bin/aws sns publish \
--topic-arn arn:aws:sns:us-east-1:xxxxxxxxx:TopicForNotification \
--subject "CPU使用率のお知らせ" \
--message "現在のCPU使用率は $CPU_RATE %です" >> /tmp/cpu.log \
--region us-east-1
- 当スクリプトに実行権限を与える:
chmod 775 test.sh
- スクリプトの中身を確認する:
cat test.sh
- スクリプトを実行する:
./test.sh
- スクリプトを実行した結果、
CPU_RATE:0.00%
が表示される
- スクリプトを実行した結果、
- 上記のスクリプトの実行した結果、ステップ4にサブスクリプションされたメールアドレスにも通知を送信したことを確認できた