Oracle Cloud 課金額をSlackへ毎日通知


はじめに

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は、以下の形式となっています。

https://myservices-cacct-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.console.oraclecloud.com/mycloud/cloudportal/dashboard

この中に含まれている、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

MeteringAPI
https://docs.oracle.com/en/cloud/get-started/subscriptions-cloud/meter/op-api-v1-usagecost-accountid-get.html

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