Oracle Cloud Infrastructure(OCI)の通知サービス+イベントサービスを用いて予算超過をSlackへ通知させてみた

皆さんこんにちは。モニターを買いに行ったら入荷待ちばかりで驚愕したid:k-furusawa--gです。みんなリモートワークでモニター買ったんですかね?

今回は前回の「Oracle Cloud Infrastructure(OCI) の予算サービスを使ってみた - Cloudii blog」の中でも紹介しました、通知・イベントサービスを利用して予算サービスと連携させてみたいと思います。予算サービス作成時にコンソールに書かれているやつです!

f:id:k-furusawa--g:20200721100755p:plain
これをやります!

通知とイベントサービスについては、過去に本ブログの執筆者の一人であるid:s-oomoriが以下の記事内で紹介したことがあります。今回はSlackWebhookを用いた通知方法のご紹介となります。

cloudii.atomitech.jp

本記事の目次です。

通知を作成しよう

まずは通知サービスを作成して通知の方法を決めます。

公式ドキュメントは以下です。

docs.cloud.oracle.com

通知サービスはメニュー内の「アプリケーション結合」にあります。

f:id:k-furusawa--g:20200706114159p:plain
通知サービスを選択

通知サービス画面が開かれたら、「トピックの作成」を押します。

f:id:k-furusawa--g:20200706114311p:plain
トピックの作成

ダイアログが開きますので、名前と説明を入力します。済んだら「作成」を押しましょう。

f:id:k-furusawa--g:20200706114411p:plain
トピックの作成

作成が完了したら、次にサブスクリプションの作成を行います。

通知の詳細画面から「サブスクリプションの作成」を押します。

f:id:k-furusawa--g:20200706115602p:plain
詳細からサブスクリプションの作成を押す

ダイアログが開きますので、必要な情報を入力していきます。

ここで設定した通知先に通知が行われるので、自分が通知を行いたい設定を入力します。今回はSlackに対して通知を行うため、 プロトコル から Slack を選択します。 Slack を選択するとURLの指定が表示されるので、そこにWebHookのURLを指定します。

f:id:k-furusawa--g:20200721114238p:plain
Slackを選択してWebHookのURLを指定

SlackのWebHookに関しては公式のドキュメントをご参照ください。

slack.com

指定を終えたら「作成」を押します。サブスクリプションの作成が完了しますが、この時点ではまだ有効ではありません。サブスクリプションの作成が完了された時点で指定されたSlackのチャンネルもしくはDMに、以下のような確認の通知が来ます。

f:id:k-furusawa--g:20200706131859p:plain
確認の通知が行われる

通知内に記載されたURLをクリックすると、サブスクリプションが有効となります。

WebHookが正常かを確認しましょう。通知詳細画面の上部にある「メッセージ公開」を押します。ダイアログが開きますので、メッセージを入力して「公開」を押します。無事に通知が届けば完了です。

f:id:k-furusawa--g:20200706132620p:plain
メッセージ公開を押して通知をテスト

イベントを作成しよう

次にイベントを作成します。

公式ドキュメントは以下です。

docs.cloud.oracle.com

イベントサービスは通知サービスと同じでメニュー内の「アプリケーション結合」にあります。

f:id:k-furusawa--g:20200706151415p:plain
イベントサービスを選択

イベント画面が開いたら、「ルールを作成」を押します。

この際、コンパートメントは「ルート」を指定してください。ドキュメントなどには書かれていませんが、予算サービスのトリガーイベント類はすべてルートコンパートメントで発生します。予算サービスのターゲットをルート以外のコンパートメントにしても、ルートに記録されるので、コンパートメント設定をルート以外にすると検知できません。

f:id:k-furusawa--g:20200706152626p:plain
イベントの作成

ダイアログが開くので、必要な情報を入力していきます。

ルール条件の設定では、イベント・タイプ を選択します。サービス名Budgets を選択しましょう。すると イベント・タイプ で各イベントを選択できます。通知を発信するトリガーとなるイベントを選択しましょう。複数設定することが可能です。今回は TriggeredAlert - Create を選択します。

アクションの設定では、アクション・タイプ通知 を選択します。通知コンパートメント には先ほど作成した通知の置かれたコンパートメントを指定します。トピック には先ほど作成した通知のトピックを指定しましょう。

f:id:k-furusawa--g:20200706154238p:plain
ルール作成

以上でイベントの作成は完了です。

通知されるのを確認する

設定した予算イベントが発生した時点で、Slackに通知が来ます。予算をすでに超過済みの金額にするか、0.1%後のものに指定すると割と早く確認が可能です。

通知が来ない場合は、以下の点を見直してください。

  • 予算サービスのイベントが正常に発生しているのか確認する(メール設定をしてメールが届くかどうか)
  • 通知サービスのSlack連携が正常か(メッセージのテストができているか)
  • イベントサービスの作成先をルートコンパートメントにしているか(公式のどこにも記載がないので見逃しがち)

機能自体は単純だがそれ以外で欠点が多い

設定自体はとても簡単だと思います。しかし、発生イベントのわかりにくさが欠点だと感じました。

このイベントサービスを設定する操作者が、どのポジションにいるユーザーなのかにもよると思いますが、イベント・タイプの中から自分がトリガーにしてほしいイベントをピンポイントで選ぶことが可能なのは、よほどOCI内部の動きに詳しい人間だけだと感じました。

ドキュメントも簡素すぎて却ってわかりにくく、内容が不足しており、コンソールで設定が可能である旨を書いているにしてはかなり不親切です。サポートに問い合わせても正常な設定方法の開示がなかなか得られず、あまり認知されていない様子でした。

実際にやる場合はほとんどの方がトライアンドエラーになるのではないでしょうか。時間があればいいですが、イベント発生のラグなども考えるとあまり手軽さは感じられませんでした。単純な機能なのですが無用な時間がかかった印象です。

おしまいに

機能以外の面で非常に躓きの多いサービスの一つとなりました。

同じようなものにポリシーがあり、あちらもドキュメントの不親切さ、サポート側に問い合わせてもはっきり答えてくれないなど、機能とは関係のない部分でハードルが上がっています。

OCIはところどころユーザー側の努力に頼っている面があるので、今後改善してほしいですね。

とはいえ設定自体は分かってしまえばそう難しいものでもありませんので、他のイベントでも一度トライしてみてはいかがでしょうか。