前提
こちらの記事を元に、EC2上にCloud9環境を構築していること
手順
-
以下のファイルを作成する
#!/bin/bash SSH_CONNECTIONS=$(ps -A x | grep sshd | grep \\[priv\\] | wc -l) INSTANCE_ID=$(ec2-metadata -i | grep -oP 'instance-id: \K\S+') TIMESTAMP=$(date --utc +%FT%T.%3NZ) aws cloudwatch put-metric-data --metric-name "SSHConnections" --dimensions InstanceId=$INSTANCE_ID --namespace "EC2" --value $SSH_CONNECTIONS --timestamp $TIMESTAMP
-
cronをインストールして起動時に有効化させる
$ sudo dnf -y install cronie-noanacron $ sudo systemctl enable crond $ sudo systemctl restart crond $ crontab -e */1 * * * * (手順1で作成したファイルのフルパス) # ssh-count.sh の権限が775でなかったら、権限を変更してください。
-
以下の条件でCloudwatch アラームを作成する
- グラフのメトリクス:先ほどのcronが実行された結果作成されたメトリクス
- メトリクスー統計:最小
- メトリクスー期間:1分
- 条件ー閾値の種類:静的
- 条件ーアラーム条件:以下(<=)
- 条件ー閾値:0
- その他ーアラームを実行するデータポイント:15/15
- 通知:(不要なので削除する)
- EC2アクションーアラーム状態のトリガー:アラーム状態
- EC2アクションーアクション:このインスタンスを停止
- アラーム名:(任意の名前)
これで15分SSH接続がないと自動的にEC2がシャットダウンされます!!
シャットダウンまでの時間を延ばしたい場合、アラームを実行するデータポイントの設定を変えてください。