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 = ******************** …