Cloud Billing を使用した自動チャット メッセージの設定の概要

このチュートリアルでは、Cloud Billing データを BigQuery にエクスポートし、Cloud Functions の関数と Cloud Scheduler ジョブを作成して、Cloud Billing データを要約したチャット メッセージを毎日送信します。すべての料金を BigQuery にエクスポートすることで、そのデータに対してクエリを実行して費用を集計できるようになります。この構成では、料金を毎日調べなくても、Google Cloud の 1 日あたりの使用料金に対する分析情報を得ることができます。

このドキュメントは、Google Cloud の費用に関する詳しい分析情報を必要とするデベロッパーや課金管理者を対象としています。Cloud 請求先アカウントの作成に慣れていることと、すでに Hangouts Chat を使用していることが前提となります。

次の図は、このチュートリアルで使用する Google Cloud コンポーネントを示したものです。

Cloud Billing から Hangouts Chat へのデータフローを示すアーキテクチャ図。

データは、Cloud Billing から BigQuery へと流れ、Cloud Functions と BigQuery の間でやり取りが行われ、Hangouts Chat Webhook へと流れます。Cloud Functions の関数をトリガーするのは Cloud Scheduler です。

目標

  • Cloud Billing データを BigQuery にエクスポートできるようにする。
  • Cloud Functions の関数を作成し、クエリ結果が記載されたチャット メッセージを送信する。
  • サービスをテストする。
  • Cloud Functions の関数を毎日呼び出す Cloud Scheduler ジョブを作成する。

費用

このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。新しい Google Cloud ユーザーは無料トライアルをご利用いただけます。

このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Cloud Console で、Cloud Shell をアクティブにします。

    Cloud Shell をアクティブにする

    Cloud Console の下部にある Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。gcloud コマンドライン ツールなどの Cloud SDK がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

Cloud Billing データを BigQuery にエクスポートできるようにする

Cloud Billing データを BigQuery にエクスポートするには、BigQuery でターゲット データセットのテーブルを作成し、そのデータセットに課金データをエクスポートするように Cloud Billing を構成します。

BigQuery でデータセットを作成する

このチュートリアルでは、アプリと同じ Cloud プロジェクトでデータセットを作成します。

すでに別の Cloud プロジェクトでデータセットを作成済みの場合は、そのデータセットをサービス アカウントと共有して、次のセクションに進むことができます。

  1. Cloud Console で、[BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [リソース] を確認するには、Cloud プロジェクト名をクリックします。

  3. Cloud Billing データを格納するターゲット テーブルを BigQuery で作成するには、[データセットを作成] をクリックします。

  4. [データセット ID] フィールドに「billing_data」と入力します。

  5. [データセットを作成] をクリックします。

Cloud Billing データを BigQuery にエクスポートする

  1. Cloud Console で、[お支払い] ページに移動します。

    [お支払い] ページに移動

  2. Cloud 請求先アカウントを選択します。

  3. [課金データのエクスポート] をクリックします。

  4. [設定を編集] をクリックします。

  5. このチュートリアルで作成した Cloud プロジェクトを選択します。

  6. 先ほど作成した billing_data データセットを選択します。

  7. [保存] をクリックします。

これで、BigQuery にデータをエクスポートするように Cloud 請求先アカウントが構成されました。エクスポート処理には最大 24 時間かかります。

データセット テーブルの名前を取得する

  1. Cloud Console で、[BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [リソース] を確認するには、Cloud プロジェクト名をクリックします。

  3. 展開するには、billing_data をクリックします。

  4. エクスポート プロセスによって作成されたテーブルの名前をクリックします。名前は gcp_billing_export_v1 で始まります。

  5. [テーブルをクエリ] をクリックします。

  6. データセットのテーブル名を控えておきます。これは、このチュートリアルで後ほど index.php ファイルをカスタマイズするために使用します。

SQL ステートメントには、FROM キーワードに続けて project_name.dataset.table_name の形式でデータセットのテーブル名が記述されています。

  • project_name は Cloud プロジェクトの名前を表します。
  • dataset はデータセットの名前を表します。
  • table_name はテーブルの名前を表します。

データセットのテーブル名の例: myproject.billing_data.gcp_billing_export_v1_000000_000000_000000

Hangouts Chat のチャットルームを作成する

  1. Hangouts Chat アプリケーションにアクセスします。
  2. [ユーザー、チャットルーム、bot を検索] 検索ボックスをクリックし、[チャットルームを作成] をクリックします。
  3. [チャットルームの名前] フィールドで、「GCP_Billing」と入力します。
  4. [作成] をクリックします。
  5. GCP_Billing のチャットルーム メニューをクリックし、[Webhook を設定] を選択します。

    「GCP_Billing」チャットルームの Webhook を構成するプルダウン メニュー。

  6. [名前] フィールドに「gcp_billing_webhook」と入力します。

  7. [保存] をクリックします。チュートリアルの後半で必要になるため、Webhook の URL を控えておきます。

Cloud Functions の関数を作成する

  1. Cloud Console で Cloud Functions に移動します。

    Cloud Functions に移動

  2. [関数を作成] をクリックします。

  3. [名前] フィールドに「getBillingAlert」と入力します。

  4. [割り当てられるメモリ] プルダウン メニューから [128 MiB] を選択します。

  5. [ランタイム] プルダウン メニューから [Python 3.7] を選択します。

  6. [main.py] タブで、次のコードを貼り付けます。

    from google.cloud import bigquery
    from httplib2 import Http
    from json import dumps
    from datetime import datetime
    
    def run_rule(request):
        client = bigquery.Client()
        query_job = client.query("""
                SELECT sum(cost) as total_cost FROM
    `project_name.dataset.tablename`""")
    
        for row in query_job:
            tcost = row["total_cost"]
    
        url = 'hangout_room_url'
        now = datetime.now()
        msg_content = "GCP Cost: {}".format(tcost) + " [date]: " + now.strftime("%m/%d/%Y, %H:%M:%S")
        bot_message = {
            'text' : msg_content}
    
        message_headers = { 'Content-Type': 'application/json; charset=UTF-8'}
    
        http_obj = Http()
    
        response = http_obj.request(
            uri=url,
            method='POST',
            headers=message_headers,
            body=dumps(bot_message),
        )
    

    以下を置き換えます。

    • project_name: プロジェクトの名前
    • dataset: データセットの名前
    • tablename: テーブルの名前
    • hangout_room_url: 先ほど控えておいた Webhook の URL
  7. [requirements.txt] タブで、次のコードを貼り付けます。

    # Function dependencies, for example:
    # package>=version
    google-cloud-pubsub==0.34.0
    google-cloud-storage==1.13.1
    google-cloud-bigquery==1.8.1
    google-cloud-core==0.29.1
    pytz==2018.7
    
  8. [実行する関数] フィールドに「run_rule」と入力します。

  9. [作成] をクリックします。

  10. getBillingAlert 関数をクリックします。

  11. [トリガー] タブをクリックします。

  12. Cloud Functions の関数の URL を控えておきます。この値は、後ほど Cloud Functions の関数の実行スケジュールを設定するときに使用します。

Cloud Functions の関数をテストする

  1. Cloud Console で Cloud Functions に移動します。

    Cloud Functions に移動

  2. getBillingAlert Cloud Functions の関数について、[操作] をクリックします。

  3. [関数をテスト] をクリックします。

  4. [関数をテスト] をクリックします。

    Cloud Billing データを含むメッセージが Hangouts Chat のチャットルームに送信されます。

Cloud Scheduler を設定する

関数を実行できることを確認したら、Cloud Scheduler を使用して、スケジュールされた間隔で関数を実行します。

このチュートリアルでは、毎日午前 10 時に関数を実行します。Cloud Scheduler では、スケジュールに cron 形式を使用します。

  1. Cloud Console で、Cloud Scheduler に移動します。

    Cloud Scheduler に移動

  2. [ジョブを作成] をクリックします。

  3. [名前] フィールドに「Billing-BigQuery」と入力します。

  4. [説明] フィールドに「Send Hangout message with Billing summary」と入力します。

  5. [頻度] フィールドに「0 10 * * *」と入力します。

  6. タイムゾーンを選択します。

  7. [ターゲット] で [HTTP] を選択します。

  8. [URL] フィールドに、関数の URL エンドポイントを入力します。

  9. [サービス] フィールドは空欄のままにしておきます。

  10. [作成] をクリックします。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成した Cloud プロジェクトを削除することです。また、リソースを個別に削除することもできます。

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ