EC2/RDS の稼動数をメール通知するスクリプト(マルチアカウント対応)

AWS のアカウントを複数所持している場合に、すべての EC2/RDS の稼動数をメール通知するスクリプトです。 AWS CLI(コマンドラインインターフェイス)が必要になります。

TO=
FROM=

AWS_CONFIG=/opt/aws/aws-config.txt

EC2_TOTAL_COUNT=0
RDS_TOTAL_COUNT=0
BODY=

IFS=$'\n'
for PROFILE in `grep "\[profile" $AWS_CONFIG | sed -e "s/\]//g" | cut -f 2 -d " "`
do
  CONTENT=
  EC2_COUNT=0
  RDS_COUNT=0
  ROW_CHANGE=0
  ARRAY=()
  for ROW in `aws --profile $PROFILE --output text ec2 describe-instances --filters="Name=instance-state-name,Values=running" --query='*[*].Instances[*].[Tags[?Key==\`Name\`].Value,InstanceType]'`
  do
   if [ $ROW_CHANGE -eq 1 ]; then
     ROW_CHANGE=0
     ARRAY+=("(EC2)$ROW:$TMP_ROW")
   else
     TMP_ROW=$ROW
     ROW_CHANGE=1
     EC2_COUNT=`expr $EC2_COUNT + 1`
     EC2_TOTAL_COUNT=`expr $EC2_TOTAL_COUNT + 1`
   fi
  done
  for ROW in `aws --profile $PROFILE --output text rds describe-db-instances --query='*[*].[DBInstanceIdentifier,DBInstanceClass]' | sed -e "s/\t/:/g"`
  do
     ARRAY+=("(RDS)$ROW")
     RDS_COUNT=`expr $RDS_COUNT + 1`
     RDS_TOTAL_COUNT=`expr $RDS_TOTAL_COUNT + 1`
  done

  ARRAY2=($(echo "${ARRAY[*]}" | sort))
  for ROW in "${ARRAY2[@]}" 
  do
     CONTENT="$CONTENT$ROW\n" 
  done
  CONTENT="$PROFILE(EC2:$EC2_COUNT/RDS:$RDS_COUNT)\n---------------\n$CONTENT\n" 
  BODY="$BODY$CONTENT" 
done

BODY="$BODY===============\nTOTAL(EC2:$EC2_TOTAL_COUNT/RDS:$RDS_TOTAL_COUNT)" 
TITLE="EC2:$EC2_TOTAL_COUNT/RSD:$RDS_TOTAL_COUNT RUNNING" 

aws --profile app --region us-east-1 ses send-email --to $TO --from $FROM --subject $TITLE --text "`echo -e $BODY `" 

/opt/aws/aws-config.txt には AWS のアクセスキーを以下のフォーマットで設定しておきます。

[profile プロファイル名1]
region = ap-northeast-1
aws_access_key_id = ********************
aws_secret_access_key = ********************

[profile プロファイル名2]
region = ap-northeast-1
aws_access_key_id = ********************
aws_secret_access_key = ********************

…