Halloween!!
今年はコロナで仮装することができません!というわけでブログお久しぶりなのですが!
DigitalOceanで毎月の請求はメールで確認するのですが、実はDigitalOceanにはAPIが豊富でして、dropletの操作だけでなく、リソースの一覧など確認できたり、様々な用途によってカスタマイズ可能となります。今回はメールで請求書を確認するだけではなくて、シェルスクリプトでSlackに通知させるように作ってみました。まずはコンソールからAPI tokenを作りましょう。
■Make API
- Applications & API
■List Billing History
https://developers.digitalocean.com/documentation/v2/#billing-history
- sample
1 |
$ curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer b7d03a6947b217efb6f3ec3bd3504582" "https://api.digitalocean.com/v2/customers/my/billing_history" |
サンプルが既に書いてあるのでこれを元にシェルスクリプトを作ってみます。
- run
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ curl -X GET "https://api.digitalocean.com/v2/customers/my/billing_history" -H "Authorization: Bearer token" |jq . % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3115 0 3115 0 0 4238 0 --:--:-- --:--:-- --:--:-- 4232 { "billing_history": [ { "description": "Payment (xxxx xxxx)", "amount": "-57.82", "date": "2020-10-01T14:02:45Z", "type": "Payment" }, { "description": "Invoice for September 2020", "amount": "57.82", "invoice_id": "xxxxxxxxxx", "invoice_uuid": "xxxxxxxxxx", "date": "2020-10-01T04:36:51Z", "type": "Invoice" }, ~省略~ $ curl -s -X GET "https://api.digitalocean.com/v2/customers/my/billing_history" -H "Authorization: Bearer token" |jq -r '.billing_history[1] | .date, .amount' 2020-10-01T04:36:51Z 57.82 |
curlで叩くとこんな感じでJSONで値が返ってきます。必要なのは date
と amount
でよろしいでしょうね。あとは軽くjqコマンドで加工して、SlackのIncoming Webhookを新規で作成しましょう。
■billing.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash url='https://hooks.slack.com/servicesxxxxxxxxxxxxxxxxxxxxxxx' username='cost' to="cost" subject='今月分の料金です!!' color="#0000FF" message=`curl -s -X GET "https://api.digitalocean.com/v2/customers/my/billing_history" -H "Authorization: Bearer token" |jq -r '.billing_history[1] | .date, .amount'` payload="payload={ \"channel\": \"${to}\", \"username\": \"${username}\", \"text\": \"${subject}\", \"attachments\": [ { \"color\" : \"${color}\", \"text\" : \"${message}\" } ] }" curl -m 5 --data-urlencode "${payload}" $url |
- cron
1 2 |
#Ansible: billing 0 9 2 * * /home/hoge/scripts/billing.sh |
- Run!!
とりあえず個人サーバーのcronでシェルを叩くようにしてみました。上記のようにSlackに通知来ればOK!(見た目ダサいけども気にしない)
■まとめ
これで素早くコスト確認できるようになった!他にもAPI叩いて検証してみます!CircleCIのスケジュール機能でも良かったけどbashだしいいかな.. →移行した。
※Goに移行しました!
0件のコメント