コンテンツに移動
Google Cloud

プログラムによる予算通知で、費用にコードを活用

2021年3月17日
Google Cloud Japan Team

※この投稿は米国時間 2021 年 3 月 5 日に、Google Cloud blog に投稿されたものの抄訳です。

要約 - 予算はアラートだけでなく、Pub/Sub に通知を送ることもできます。Pub/Sub を設定すると、あらゆるサービスをつなげて反応させることが可能です。予算に関する情報とコードを併せて使用することで、さまざまなことができます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.24.09_AM.max-700x700.png
プログラムによる予算通知を使用すると自動化が促進され、FinOps ライフサイクルの最適化フェーズにも適合します

これまでに、予算の設定方法予算アラートにさらに多くのメールを追加する方法について説明してきました。ただし、まだしきい値に基づいてアラートを取得するところまでです。他のサービスを統合する場合や、予算アラートにアクションを実行する場合は、どうすればよいでしょうか。

プログラムによる予算通知を活用すれば、それが可能になります。

ただしそれには、手順を理解していただく必要があります。

まず設定方法(今回はチェックボックス 1 つだけでは終わりません)を確認し、それを使って何ができるかを見ていきましょう。

Pub/Sub の活用

予算を更新する前に、Pub/Sub トピックを作成する必要があります。Pub/Sub に慣れていない場合は、こちらのページで詳細をご確認ください。簡単に言えば、Pub/Sub は名前のとおり、パブリッシャーとサブスクライバーとの間でのメッセージ処理に役立つツールです。今回はごくシンプルにするため、任意の数のパブリッシャー(メッセージを送信する側)とサブスクライバー(メッセージを受信する側)を持つことができるトピックを 1 つだけ使用することにします。

このケースでのイベント パブリッシャーは予算です。サブスクライバーの追加については後ほど取り上げます。まずは、左のナビゲーションで Pub/Sub を見つけてください。前回の投稿で、Pub/Sub を行うためのプロジェクトが必要になると説明しましたが、以前ワークスペースに使用したものを使うことができます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.25.18_AM.max-500x500.png
ロゴの濃い青のドットがパブリッシャー、薄い青のドットがサブスクライバーを表しています

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

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.26.39_AM.max-700x700.png

完全なフォーマットは「projects/<project-id>/topics/<topic-name>」です

続いて、新しい予算を作成するか、既存の予算を編集します。前回の投稿で使用したチェックボックスの真下にある、次のようなチェックボックスを使います。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.27.28_AM.max-700x700.png

チェックボックスは 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] を探してクリックします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.29.46_AM.max-500x500.png
同じプロジェクトを使用してください

Pub/Sub と同じように、プロジェクトが必要です(そして、課金を有効にする必要があります)。混乱しないように、予算に関するワークスペース、Pub/Sub、Functions に同じプロジェクトを使用できます。

ここでもシンプルにするため、メッセージを受け取るだけの軽量の関数に絞って作成します。詳しくは、Python 関数の作成ガイドをご覧ください。「budget-notification-logger」という名前の新しい関数を作成し、任意のリージョンを選択します。重要なのは、Pub/Sub トリガーを選択することです。続いて、先ほど作成したトピックを選択し、[保存] をクリックします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.30.42_AM.max-700x700.png

Pub/Sub トピックがメッセージを受け取ると、関数は多数のソースによってトリガーされることができます

2 つ目のステップでは、ごくシンプルな関数コードを使って、通知を受け取ったことを確認します。今回は Python 3.7 のコードをご紹介しますが、どんな言語でも簡単にできるはずです。Python 3.7 ランタイムを選択し、エントリ ポイントを hello_pubsub のままにします。

注: Cloud Build API を有効にする通知が表示される場合があります。これは、特定の関数をデプロイするために必要なものです。有効にする手順に沿って、準備ができたら関数に戻ります。

サンプルのコードはメッセージを受け取って出力するだけのもので、今回の用途には最適です。作業を続けて、関数をそのままデプロイしてください。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.31.37_AM.max-700x700.png
緑のチェックマークが表示されれば完了です。時間がかかることもあるので、お茶でも飲んで待ちましょう

Pub/Sub と Cloud Functions の併用

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

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.32.35_AM.max-400x400.png

[ログを表示] で関数と出力を確認できます

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

ここでもシンプルにするために、先ほどのサンプル通知をトピックに送ります。そのままコピーして貼り付けてください。ここでは、すべてが問題なく動作していることを確かめるためにテスト メッセージをパブリッシュしますが、最終的には予算から通常の通知も送信されるようになるはずです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2021-03-02_at_9.33.37_AM.max-700x700.png

これはテストです。本物の予算通知には、実際のデータが表示されます

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

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2020-08-07_at_14.16.02.max-1100x1100.png
ロギングと関連トピックについての詳細は、Stack Doctor の再生リストをご覧ください。

結果は成功です。メッセージは Pub/Sub から関数に送信されていることを確認でき、そのことをログに出力できました。ログのページを改めて確認すると、本物のデータを使った実際の予算からのメッセージが届いていることもわかります。

コードを使うことで、予算を基にさまざまなことができるようになります。次の投稿では予算を Slack に送信して、もっと役立つアクションを行いましょう。今回取り上げた、プログラムによる予算通知の詳細については、こちらのドキュメントをご覧ください。

-Google Cloud デベロッパー アドボケイト Mark Mirchandani

投稿先