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

EC2アイキャッチ画像

・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にログインし、ログファイル書き込み、プロセスが起動しているのを確認しました。