AutoScalingで起動したEC2内のシェルをバックグラウンド動かす【AWS】

・AutoScalingで起動したEC2にあるシェルをユーザーデータを使ってバックグラウンドで動かす
バックグランドで動かすシェルの作成
ec2-userのホームディレクトリに下記のリソース取得シェルとログファイルを用意します。
cd ~
touch system_resources.log
vi log_system_resource.sh
シェルの内容は下記を貼り付け
#!/bin/bash
# ログファイルの場所
LOGFILE="/home/ec2-user/system_resources.log"
# 無限ループで1分ごとにリソース状況を記録
while true; do
# タイムスタンプをログに追加
echo "--------------------------------------" >> $LOGFILE
echo "Timestamp: $(date)" >> $LOGFILE
echo "--------------------------------------" >> $LOGFILE
echo " CPU 使用率" >> $LOGFILE
top -bn1 | grep "Cpu(s)" | awk '{print "CPU 使用率: " $2 + $4 "%"}' >> $LOGFILE
echo "" >> $LOGFILE
echo " メモリ使用状況" >> $LOGFILE
free -m | awk 'NR==2{printf "メモリ使用量: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2}' >> $LOGFILE
echo "" >> $LOGFILE
echo " ディスク使用状況" >> $LOGFILE
df -h | awk '$NF=="/"{printf "ディスク使用量: %d/%dGB (%s)\n", $3,$2,$5}' >> $LOGFILE
echo "" >> $LOGFILE
echo " ネットワークインターフェース" >> $LOGFILE
ifconfig | grep -A 1 'eth0' | awk '/RX packets/{print "受信バイト数: " $5} /TX packets/{print "送信バイト数: " $5}' >> $LOGFILE
echo "" >> $LOGFILE
echo " システムの稼働時間" >> $LOGFILE
uptime -p >> $LOGFILE
echo "" >> $LOGFILE
echo "リソース使用状況のログ記録が完了しました。" >> $LOGFILE
# 60秒(1分)待機
sleep 60
done
準備ができましたら、AutoScalingの起動テンプレートに設定するため、AMIを取得しておきます。

起動テンプレートの更新
AWSのマネジメントコンソールにログインしEC2ダッシュボードへ移動し、
左側メニューのAuto Scaling グループを選択し、起動テンプレートをクリック

「アクション」より「テンプレートを変更」をクリック

マシンイメージに上記で作成したshを格納しているAMIを指定します。

下にスクロールし「高度な設定」のユーザーデータに下記を追加し「テンプレートのバージョンを作成」
#!/bin/bash
nohup sh /home/ec2-user/log_system_resource.sh

デフォルトの変更
「デフォルトバージョンを設定」で先ほど作成したデフォルトバージョンに変更します。

確認
AutoScaling先のEC2にログインし、ログファイル書き込み、プロセスが起動しているのを確認しました。


- タグ:
- AutoScaling