sshログイン時にAWSの料金を表示させる

この記事はShell Script Advent Calendar 2017の記事です。

個人でAWSのようなクラウドサービス使ってると、クラウド破産しないかドキドキしませんか?
僕は怖いのでコンソールで確認をしてましたが、めんどくさくなってきたので端末にログインしたときに料金を表示させようと思いました。

前提

  • 対象クラウド
    • AWS
  • OS
    • Ubuntu16.04

手順

まず以下のようなシェルを作ります。

#!/bin/bash

# 超えたくない「月の料金(ドル)」を指定
threshold=1

billing_file_path=/tmp/now_billing
now_date=$(date +%Y%m%d)

test -e ${billing_file_path} || mkdir -p ${billing_file_path}

if [ ! -e "${billing_file_path}"/"${now_date}" ]; then
    # get billing
    billing_json=$(aws cloudwatch get-metric-statistics \
        --region us-east-1 \
        --namespace 'AWS/Billing' \
        --metric-name EstimatedCharges \
        --start-time "$(date -d '1 days ago' +%FT%TZ)" \
        --end-time "$(date +%FT%TZ)" \
        --period 86400 \
        --statistics 'Average' \
        --dimensions 'Name=Currency,Value=USD')
    # save
    echo -n "${billing_json}" | jq -r '.Datapoints[].Average' > "${billing_file_path}"/"${now_date}"
fi

echo "================================"
billing=$(cat "${billing_file_path}"/"${now_date}")

echo -n "Billing(${now_date}): "
if [ "$(echo "${billing} > ${threshold}" | bc)" -eq 1 ]; then
    echo -e "\e[31m\$${billing}\e[m"
    /usr/games/cowsay "超えちゃってるよ!?"
else
    echo -e "\$${billing}"
fi
echo "================================"

次に、/etc/motd でログイン時にメッセージを表示させます。

rm -f /etc/motd
ln -s /var/run/motd /etc/motd
mkdir /etc/update-motd.d

# 上記シェル
vim /etc/update-motd.d/01-now-billing
chmod +x /etc/update-motd.d/01-now-billing

これでsshログインしてみると…

しきい値を超えてない場合

超えてる場合

ログイン後、現在の料金と設定した料金のしきい値が超えていないか表示できるようになりました。
わかりやすい!

最後に

今回はAWSでやりましたが、なんにでも応用できると思いますので
毎回確認することで安心感を得たいなにかがあったらぜひやってみましょう!

では!