<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CloudBilling on LIFELOG</title>
    <link>/tags/cloudbilling/</link>
    <description>Recent content in CloudBilling on LIFELOG</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <copyright>© 2026 0222-nnn</copyright>
    <lastBuildDate>Sat, 05 Sep 2026 00:00:05 +0900</lastBuildDate><atom:link href="/tags/cloudbilling/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>TerraformでGoogle Cloudの予算アラートを作り、Pub/Sub通知の中身まで確かめた</title>
      <link>/blog/20260905_terraform_gcp_advanced_billing_budget_alert/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:05 +0900</pubDate>
      
      <guid>/blog/20260905_terraform_gcp_advanced_billing_budget_alert/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;Cloud Billingの予算は、コスト管理の入口としてよく紹介されます。ところが設定しようとすると、いくつも引っかかります。&lt;/p&gt;
&lt;p&gt;APIが無効で一覧すら取れません。&lt;code&gt;terraform apply&lt;/code&gt;は403で通りません。Pub/Sub通知のために権限を付けろと書かれているサービスアカウントは、そもそも名前が違っていました。&lt;/p&gt;
&lt;p&gt;そして最も大事な点があります。&lt;strong&gt;この記事で作る通知だけの予算（alerts-only budget）は、課金を止めません。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2026年7月27日に &lt;a href=&#34;https://cloud.google.com/billing/docs/how-to/budgets-spend-caps&#34; target=&#34;_blank&#34;&gt;Spend Cap Budget&lt;/a&gt; が Preview で提供開始されました。対象サービスなら、新規の利用を自動停止できます。&lt;/p&gt;
&lt;p&gt;対象サービスは4つです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gemini API&lt;/li&gt;
&lt;li&gt;Gemini Enterprise Agent Platform&lt;/li&gt;
&lt;li&gt;Cloud Run&lt;/li&gt;
&lt;li&gt;Cloud Run functions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし、確かめた範囲では Terraform から作れませんでした。理由は&lt;a href=&#34;#spend-cap-budget-%e3%81%af%e7%a2%ba%e3%81%8b%e3%82%81%e3%81%9f%e7%af%84%e5%9b%b2%e3%81%a7%e3%81%af-terraform-%e3%81%8b%e3%82%89%e4%bd%9c%e3%82%8c%e3%81%aa%e3%81%8b%e3%81%a3%e3%81%9f&#34;&gt;あとで実際に確かめます&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;上限に達しても通知が飛ぶだけで、リソースは動き続けます。「予算を設定したから安心」にはなりません。&lt;/p&gt;
&lt;p&gt;元にしたPoCは通知を請求アカウントの既定メールに任せていて、届くかどうかを確かめていませんでした。この記事ではPub/Subに送り、&lt;strong&gt;メッセージを実際に読みます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;対象読者は、TerraformでGoogle Cloudのリソースを作ったことがある人です。請求周りの入門は扱いません。&lt;/p&gt;
&lt;p&gt;通知を受けてリソースを停止する実装、組織レベルの予算、BigQueryへの課金データエクスポートは扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;User ADC から Budget API を使うのに何が要るのか&lt;/li&gt;
&lt;li&gt;プロジェクトの指定は ID か番号か&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pub/Sub 通知は本当に届くのか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通知のメッセージには何が入るのか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Publisher の権限は誰が付けるのか&lt;/li&gt;
&lt;li&gt;通常の予算を超えたら何が起きるのか&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spend Cap Budget は Terraform で作れるのか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;予算の操作は監査ログで追えるのか&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform&lt;/li&gt;
&lt;li&gt;請求アカウントに対する&lt;code&gt;roles/billing.admin&lt;/code&gt;または&lt;code&gt;roles/billing.costsManager&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;通知先トピックの&lt;code&gt;pubsub.topics.setIamPolicy&lt;/code&gt;（Budget API が Publisher ロールを付けるのに要る）。ドメイン制限共有を有効にしている組織では、あわせて除外設定も要る&lt;/li&gt;
&lt;li&gt;Pub/Sub のトピックとサブスクリプションを作成・削除・受信する権限&lt;/li&gt;
&lt;li&gt;User ADC を使う場合、&lt;code&gt;billing_project&lt;/code&gt; に指定するプロジェクトの&lt;code&gt;serviceusage.services.use&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;billing_project&lt;/code&gt; に指定するプロジェクトで &lt;a href=&#34;https://docs.cloud.google.com/billing/docs/how-to/budget-api-setup&#34; target=&#34;_blank&#34;&gt;Budget API（&lt;code&gt;billingbudgets.googleapis.com&lt;/code&gt;）を有効化&lt;/a&gt;しておくこと&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.5、google 7.46.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今回は請求アカウントの権限で作成します。&lt;strong&gt;プロジェクト1つを対象にする予算なら、&lt;a href=&#34;https://cloud.google.com/billing/docs/how-to/budget-api-access-control&#34; target=&#34;_blank&#34;&gt;プロジェクト側の権限でも作成できます&lt;/a&gt;&lt;/strong&gt;（&lt;code&gt;resourcemanager.projects.get&lt;/code&gt; / &lt;code&gt;billing.resourcebudgets.read&lt;/code&gt; / &lt;code&gt;billing.resourcebudgets.write&lt;/code&gt;）。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
