7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-03-29

はじめに

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通知になっています)

001.png

概要

006.png

使い方

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を無効にする必要があります。

以下の画像のページに移動して、ユーザを作成します。

002.png

画面に従ってユーザを作成した後、Cloud Account Administrator の Role を付与します。

003.png

Dashboard Account ID の確認

Oracle Cloud の Dashboard を開いたときの、URLを確認します。以下の画像のページです。

004.png

上記のDashboardのURLは、以下の形式となっています。

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

この中に含まれている、cacct-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx が、Account IDとなります。

IdentityCloudService IDの確認

Identity Cloud Service のコンソールを開きます。以下のページとなります。

005.png

上記ぺージの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

001.png

定期実行(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

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?