LoginSignup
2
4

【AWS】SNSからアラートメール送信機能を使ってみました

Posted at

SNSからアラートメールを送信

EC2のCPU使用率をAWSのSNS機能を使って送信してみました。

ステップ1: EC2用のIAM Roleを作成する

  • IAM ロールロールを作成をクリックする

image.png

  • AWSのサービスをクリックして、ユースケースEC2を選択する

image.png

  • AmazonSSMFullAccessを選択する

image.png

  • AmazonSNSFullAccessを選択した上、次へをクリックする

image.png

  • ロール名に名前を入力の上、作成する

image.png

  • ロールが作成されたことを確認することができた

image.png

ステップ2: EC2を作成する

  • EC2インスタンスを起動をクリックする

image.png

  • 名前とタグ: vpn-server
  • アプリケーションおよびOSイメージ: Amazon Linux 2

image.png
image.png

  • ネットワーク設定
    • VPC: 既存のVPCを選択する
    • Subnet: 任意のPublic Subnetを選択する
    • パブリックIPの自動割り当て: 有効化にする
    • セキュリティグループ: セキュリティグループを作成するをチェック→セキュリティグループ名説明にバリューを入れる
    • セッションマネージャーを用いてログインするため、インバンドルールが不用

image.png

  • キーペア(ログイン): デフォルト値のキーペアなしで続行を選択する
    ※ EC2のSSMFullAccessのセッションマネージャー機能を用いてログインするため、キー認証ではキーペアなしで続行を選択する

image.png

  • 高度なネットワーク設定
    ※ 下記の図のようにデフォルト値のままにする

image.png

  • ストレージを設定
    ※ 下記の図のようにデフォルト値のままにする
  • 高度な詳細
    • IAMインスタンスプロフィール: 上記ステップ1で作られたIAMロールを選択する
      ※ 他の設定は下記の図のようにデフォルト値のままにする

image.png

image.png
image.png
image.png

  • EC2インスタンスが作成されたことを確認することができた

image.png

ステップ3: SNSトピックを作成する

  • Amazon SNSトピックトピックの作成をクリックする

image.png

  • トピックの作成
    • タイプ: スタンダードにチェックを入れる
    • 名前: 任意の内容を入れる
    • 表示名: 任意の内容を入れる
    • 他の設定はデフォルトのままにする

image.png

  • トピックが作成されたことを確認する

image.png

ステップ4: サブスクリプションを作成する

  • Amazon SNSトピックサブスクリプションの作成をクリックする
  • 詳細
    • トピック ARN: 上記のステップ3で作成したトピックを選択する
    • プロトコル: Eメールを選択する
    • エンドポイント: 送信先のEメールアドレスを入力する
    • 他の設定はデフォルトのままにする
    • サブスクリプションの作成をクリックする

截屏2023-10-14 20.14.57.png

  • 上記に登録したEメールアドレスに確認メールが届くので、そのConfirm subscriptionリンクを押下し、Subscription Confirmed!という文言が表示されればOK

IMG_6529.jpg

ステップ5: EC2にCPU使用率をSNS経由で知らせる

  • セッションマネージャーを使ってインスタンスに接続する

image.png

  • Root userに切り替える

image.png

  • AWS Cliの場所を確認する
which aws

image.png

  • 以下のスクリプトを実装する
    • --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%が表示される

截屏2023-10-14 20.50.07.png

  • 上記のスクリプトの実行した結果、ステップ4にサブスクリプションされたメールアドレスにも通知を送信したことを確認できた

IMG_6530.jpg

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4