はじめに
Oracle Cloud の課金額をSlackに通知する仕組みを、サーバレス(Oracle Functions) で作成しました。GitHubに公開しているので、ご自由に利用可能です
https://github.com/Sugi275/oraclecloud-billing-slack
クラウドサービスを使っていると、今いくらくらいの費用が掛かっているか気になるものです。
毎日、OracleCloudの課金ページを見に行くのはめんどくさいので、Slackで毎日自動通知してくれる仕組みを使って、Oracle Cloudライフを快適に過ごしましょう。
実行することで、昨日と今月の課金データをSlackへ通知することが出来ます。Oracle Functions を自動的に毎日実行することで、定期的に課金額を教えてくれます。
現在、Resource名がわかりにくいものとなっているため、わかりやすい内訳を確認したい場合は、Oracle Cloud のページを確認するとよいです。
(OracleCloudのMeteringAPIで取得できるデータがわかりにくいものになっているため、このようなSlack通知になっています)
概要
使い方
Slack
Incoming Webhook の生成
以下の記事を参考に、Slackの Incoming Webhookを生成します。
https://api.slack.com/incoming-webhooks
https://qiita.com/vmmhypervisor/items/18c99624a84df8b31008
Oracle Cloud
Userの作成
Oracle Cloud から課金額の取得するための Metering API があります。これを実行するには、Oracle Cloud の全権限を操作するための、「Cloud Account Administrator」権限が必要になっています。権限が強すぎるため、課金額の参照権限のみでAPIが実行できるようになってほしいです・・・が、現状は致し方ないと思うので妥協します。
なお、作成したユーザは、MFA(多要素認証)を有効にするとAPIから値を取得できないため、MFAを無効にする必要があります。
以下の画像のページに移動して、ユーザを作成します。
画面に従ってユーザを作成した後、Cloud Account Administrator の Role を付与します。
Dashboard Account ID の確認
Oracle Cloud の Dashboard を開いたときの、URLを確認します。以下の画像のページです。
上記のDashboardのURLは、以下の形式となっています。
この中に含まれている、cacct-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx が、Account IDとなります。
IdentityCloudService IDの確認
Identity Cloud Service のコンソールを開きます。以下のページとなります。
上記ぺージのURLは、以下の形式となっています。
https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole
この中に含まれている、idcs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx が、IDSC の IDとなります。
Oracle Functions
Oracle Functions の準備
以下の記事を参考に、Oracle Functions を有効にします
https://qiita.com/sugimount/items/018e08f575ecefb1546c
Oracle Functions のコンソール画面で、適当なアプリケーション(枠組み)を作成します。今回の例では、env-app
という名前を使用しています。
env-app の名前は任意の名前に変更可能ですが、変更した場合は、下記Githubの手順にある makefile の中身を書き換える必要があります。
GitHub から取得してDeploy
github から clone します
git clone https://github.com/Sugi275/oraclecloud-billing-slack.git
makefileを使って、makeをします。これにより、Oracle Functions へ deploy します。
make
環境変数設定
Oracle Functions へ環境変数を設定します。
fn config func env-app oraclecloud-billing-slack ORACLECLOUD_USERNAME "username"
fn config func env-app oraclecloud-billing-slack ORACLECLOUD_PASSWORD "password"
fn config func env-app oraclecloud-billing-slack ORACLECLOUD_ACCOUNT_ID "idcs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
fn config func env-app oraclecloud-billing-slack ORACLECLOUD_IDCS_ID "cacct-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
fn config func env-app oraclecloud-billing-slack SLACK_INCOMING_URL "https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx"
それぞれの環境変数は、Slack や Oracle Cloud でメモった値を使用して設定します。
- ORACLECLOUD_USERNAME : 作成したユーザ名
- ORACLECLOUD_PASSWORD : 作成したユーザのパスワード
- ORACLECLOUD_ACCOUNT_ID : Dashboard のURL に含まれているID (idcsから始まる文字列)
- ORACLECLOUD_IDCS_ID : Indentity Cloud Service のURLに含まれているID (cacctから始まる文字列)
- SLACK_INCOMING_URL : Slack Incoming Webhook の URL
実行
Oracle Functions を実行することで、Slack へ課金額が通知されます。
fn --verbose invoke env-app oraclecloud-billing-slack
定期実行(limited)
Oracle Functions では、現在、プレビュー版となっており、定期実行する機能が制限されています。GAされた場合は、おそらく有効になると定期実行が出来るようになると思います。
参考URL
JSON in GO
https://stackoverflow.com/questions/17156371/how-to-get-json-response-in-golang
slack message attachments
https://api.slack.com/docs/message-attachments