約 1 年間、AWS で多数の EC2 インスタンスを実行しています。現在、インスタンスを起動した際に使用したユーザー名に基づいて、未使用のインスタンスのクリーンアップ アクティビティを実行しようとしています。
S3 バケットから cloudtrail ログをダウンロードして、ユーザー名と「RunInstances」イベントをフィルタリングして、インスタンスを起動したユーザーとインスタンスの詳細を見つけられるようにしました。
以下は、すべての cloudtrail ログを 1 つのフォルダーにダウンロードし、それらを解凍して、「RunInstances」イベントでインスタンスをフィルター処理し、インスタンスの数を与えるために使用したスクリプトです。
「RunInstances」イベントを使用して各ログからユーザー名を取得し、インスタンスを停止する方法についてサポートが必要です。
私のスクリプト:
#!bin/sh
s3url="s3://S3bucket/AWSCloudtrailLogs/<accountno>/CloudTrail/region/2016/"
for (( i=1; i<=12; i++ ))
do
for (( j=1; j<=31; j++ ))
do
if [[ $i -le 9 && $j -le 9 ]]
then
aws s3 cp $s3url/0$i/0$j/ ~/test/ --recursive
elif [[ $i -le 9 && $j -ge 10 ]]
then
aws s3 cp $s3url/0$i/$j/ ~/test/ --recursive
elif [[ $i -ge 10 && $j -le 9 ]]
then
aws s3 cp $s3url/$i/0$j/ ~/test/ --recursive
elif [[ $i -ge 10 && $j -ge 10 ]]
then
aws s3 cp $s3url/$i/$j/ ~/test/ --recursive
fi
done
done
for v in `ls ~/test/` ; do gunzip $v ; done
for v in `ls ~/test/` ; do cat ~/test/$v | grep RunInstances >> ~/test/result.txt; done
grep -o 'RunInstances' ~/test/result.txt | wc -l
とにかく、zipファイルをダウンロードせずにs3バケット自体から直接情報を取得できますか? 約 100 万を超えるログ ファイルがあるため、これには多くの時間がかかるためです。
プログラミング言語またはスクリプトでこれを理解する方法が必要です。
ご協力ありがとうございました。