AWSのCost usage reportを取得するbashスクリプト

2021-03-7 - 読み終える時間: 2 分

なんというか、雑な造りではある。

請求書ごとのgzファイルで格納される仕様だそうで、前に作ったやつを少し改修した。

コード全文

#!/bin/bash

# CUR get script

## 2021-03-03
## zin@alterworks.tokyo

### Setting VARs

_MONTH_previous=`date +%m -d "-1 month"`
_MONTH_now=`date +%m`
_YEAR_now=`date +%Y`

if [ "${_MONTH_now}" = "01" ]; then
    _YEAR_previous=`date +%Y -d "-1 year"`
else
    _YEAR_previous=`date +%Y`
fi

_DATE_pre=${_YEAR_previous}${_MONTH_previous}01
_DATE_suf=${_YEAR_now}${_MONTH_now}01
_S3FOLDER_name=${_DATE_pre}-${_DATE_suf}
_LIST_name=${0}.list
_TMP_dir=/aws-cost/CUR-${_DATE_pre}

### Load list

_COUNT_num=1

grep -v -e ^# ${_LIST_name} | while read LINE
do
    _PROFILE_name=`echo ${LINE} | awk -F, '{ print $1 }'`
    _S3BUCKET_name=`echo ${LINE} | awk -F, '{ print $2 }'`
    _MANIFEST_name=`echo ${LINE} | awk -F, '{ print $3 }'`
    #### get Manifest PATH
    _MANIFEST_key=`aws --profile ${_PROFILE_name} s3api list-objects-v2 --bucket ${_S3BUCKET_name} | jq '.Contents[].Key' | grep ${_S3FOLDER_name}/${_MANIFEST_name}`
    #### "Key" -> Key
    _MANIFEST_key=`echo ${_MANIFEST_key} | sed s/\"//g`

    #### get CUR PATH
    ##### get MANIFEST
    mkdir -p ${_TMP_dir}/${_PROFILE_name}
    aws --profile ${_PROFILE_name} s3api get-object --bucket ${_S3BUCKET_name} --key ${_MANIFEST_key} ${_TMP_dir}/${_PROFILE_name}/${_MANIFEST_name}
    ##### get report
    _CUR_name=`jq '.reportKeys' ${_TMP_dir}/${_PROFILE_name}/${_MANIFEST_name} | grep ${_S3FOLDER_name}`
    _CUR_name=`echo ${_CUR_name} | sed s/\"//g`
    _CUR_name=`echo ${_CUR_name} | sed s/\,//g`
    declare -a _CUR_names=($_CUR_name)
    for x in ${_CUR_names[@]}
    do
        aws --profile ${_PROFILE_name} s3api get-object --bucket ${_S3BUCKET_name} --key ${x} "${_TMP_dir}/${_PROFILE_name}/${_S3FOLDER_name}_${_PROFILE_name}_CUR-${_COUNT_num}.csv.gz"
        _COUNT_num=`expr ${_COUNT_num} + 1`
    done
done

cd ${_TMP_dir} && tar czf CUR-${_DATE_pre}.tgz ./*

2020-03-03 のはなし