プログラムによる予算通知で、費用にコードを活用
Google Cloud Japan Team
※この投稿は米国時間 2021 年 3 月 5 日に、Google Cloud blog に投稿されたものの抄訳です。
要約 - 予算はアラートだけでなく、Pub/Sub に通知を送ることもできます。Pub/Sub を設定すると、あらゆるサービスをつなげて反応させることが可能です。予算に関する情報とコードを併せて使用することで、さまざまなことができます。


これまでに、予算の設定方法と予算アラートにさらに多くのメールを追加する方法について説明してきました。ただし、まだしきい値に基づいてアラートを取得するところまでです。他のサービスを統合する場合や、予算アラートにアクションを実行する場合は、どうすればよいでしょうか。
プログラムによる予算通知を活用すれば、それが可能になります。
ただしそれには、手順を理解していただく必要があります。
まず設定方法(今回はチェックボックス 1 つだけでは終わりません)を確認し、それを使って何ができるかを見ていきましょう。
Pub/Sub の活用
予算を更新する前に、Pub/Sub トピックを作成する必要があります。Pub/Sub に慣れていない場合は、こちらのページで詳細をご確認ください。簡単に言えば、Pub/Sub は名前のとおり、パブリッシャーとサブスクライバーとの間でのメッセージ処理に役立つツールです。今回はごくシンプルにするため、任意の数のパブリッシャー(メッセージを送信する側)とサブスクライバー(メッセージを受信する側)を持つことができるトピックを 1 つだけ使用することにします。
このケースでのイベント パブリッシャーは予算です。サブスクライバーの追加については後ほど取り上げます。まずは、左のナビゲーションで Pub/Sub を見つけてください。前回の投稿で、Pub/Sub を行うためのプロジェクトが必要になると説明しましたが、以前ワークスペースに使用したものを使うことができます。


では、シンプルに進めていきましょう。上部の [トピックを作成] で新しいトピックを作成します。役割を説明する名前を付けたければ、「budget-notification-topic」のような名前にします。暗号鍵オプションは(今回の投稿がこれ以上長くならないように)そのままにして、トピックを作成します。トピックの名前全体が画面に表示されたら、次に進みます。


完全なフォーマットは「projects/<project-id>/topics/<topic-name>」です
続いて、新しい予算を作成するか、既存の予算を編集します。前回の投稿で使用したチェックボックスの真下にある、次のようなチェックボックスを使います。


チェックボックスは 1 つだけです
このチェックボックスをオンにし、作成したばかりのトピックを選択します(まずプロジェクトの選択を求められる場合もあります)。続いて [保存] をクリックして、次に進みます。
通知とは
パブリッシャー(予算)を設定できました。これでイベントがトピックに送信されるようになりますが、それは何を意味するのでしょうか。まず、予算はトピックに対して、次のような通知を一日に何度か送信するようになります。
これは、プロパティのサブセットを含むメッセージのサンプルです
詳しくは、完全な通知のフォーマットをご覧ください。ただしここでは、主要なプロパティに絞って取り上げます。
costAmount は、選択したフィルタ(Compute Engine プロダクトのみ、担当する開発プロジェクトのみなど)の予算に対する現在の費用です。
budgetAmount は予算に設定した金額であり、budgetAmountType は予算の設定に応じて SPECIFIED_AMOUNT または LAST_MONTH_COST のいずれかになります。
costIntervalStart は費用が測定される現在の期間の開始日で、その月の開始日です。
alertThresholdExceeded は設定したしきい値に基づく、通過した最新のしきい値です。しきい値について確認する場合は、最初の投稿をご参照ください。
budgetDisplayName は予算の名前です。ただしメタデータを追加すれば、予算の一意の ID を取得することもできます(後ほどご説明します)。
以上の基本的なプロパティを使用すれば、予算に関するさまざまな情報が手に入ります。それに加えて、この通知は 1 日に複数回受け取ることができます(先日確認した際には、1 日に 40 回以上届いていました)。そのため、常に最新の情報を取得できます。
注: 通知はきわめて頻繁に届きますが、費用データがリソースレベルから報告できるようになるまでには、少し時間を要します。予算の情報は最適な情報で更新されますが、その点を念頭に置いて計画してください。
もう一つ注意すべき点は、この通知はしきい値のアラートに干渉しないということです。そのままの設定でも、アラートを同じ方法で受け取れます。通知は Pub/Sub トピックにも送られます。
それは素晴らしいことですが、私たちは通知を使って何かをしなければなりません。そこで、軽量の Cloud Functions をトピックのサブスクライバーとして利用しましょう。
Cloud Functions の活用
左のナビゲーションから [Cloud Functions] を探してクリックします。


Pub/Sub と同じように、プロジェクトが必要です(そして、課金を有効にする必要があります)。混乱しないように、予算に関するワークスペース、Pub/Sub、Functions に同じプロジェクトを使用できます。
ここでもシンプルにするため、メッセージを受け取るだけの軽量の関数に絞って作成します。詳しくは、Python 関数の作成ガイドをご覧ください。「budget-notification-logger」という名前の新しい関数を作成し、任意のリージョンを選択します。重要なのは、Pub/Sub トリガーを選択することです。続いて、先ほど作成したトピックを選択し、[保存] をクリックします。


Pub/Sub トピックがメッセージを受け取ると、関数は多数のソースによってトリガーされることができます
2 つ目のステップでは、ごくシンプルな関数コードを使って、通知を受け取ったことを確認します。今回は Python 3.7 のコードをご紹介しますが、どんな言語でも簡単にできるはずです。Python 3.7 ランタイムを選択し、エントリ ポイントを hello_pubsub のままにします。
注: Cloud Build API を有効にする通知が表示される場合があります。これは、特定の関数をデプロイするために必要なものです。有効にする手順に沿って、準備ができたら関数に戻ります。
サンプルのコードはメッセージを受け取って出力するだけのもので、今回の用途には最適です。作業を続けて、関数をそのままデプロイしてください。


Pub/Sub と Cloud Functions の併用
関数の準備が整いましたが、本当に動作するか確認しなければなりません。右側にある 3 つのドット(コンテキスト メニューとも呼びます)をクリックすると現れる [ログを表示] をクリックすると、print ステートメントを含む関数のログを表示できます。


[ログを表示] で関数と出力を確認できます
ログビューアに、関数を作成したことが表示されるはずです。このまま何もせず予算通知が届くのを待つこともできますが、少し時間がかかることもあります。すべて問題なく動作していることを確かめるために、Pub/Sub でテスト メッセージを送りましょう。新しいタブかウィンドウで Pub/Sub ページに戻り、特定のトピックをクリックします。画面の上部で [メッセージのパブリッシュ] をクリックします。
ここでもシンプルにするために、先ほどのサンプル通知をトピックに送ります。そのままコピーして貼り付けてください。ここでは、すべてが問題なく動作していることを確かめるためにテスト メッセージをパブリッシュしますが、最終的には予算から通常の通知も送信されるようになるはずです。


これはテストです。本物の予算通知には、実際のデータが表示されます
[パブリッシュ] をクリックしてから、関数のログが表示されているタブかウィンドウに戻ります。ログ インターフェースに表示されるまで数秒かかることもあります。下のボタンをクリックすると、新しいログが表示されます。しばらく待つと、次のような画面になります。


結果は成功です。メッセージは Pub/Sub から関数に送信されていることを確認でき、そのことをログに出力できました。ログのページを改めて確認すると、本物のデータを使った実際の予算からのメッセージが届いていることもわかります。
コードを使うことで、予算を基にさまざまなことができるようになります。次の投稿では予算を Slack に送信して、もっと役立つアクションを行いましょう。今回取り上げた、プログラムによる予算通知の詳細については、こちらのドキュメントをご覧ください。
-Google Cloud デベロッパー アドボケイト Mark Mirchandani