このドキュメントでは、Pub/Sub を使用して、プログラムによる予算と費用の異常(プレビュー)通知を設定する方法について説明します。
通常、予算と費用の異常は、メール通知を送信するように構成されます。予算または費用の異常検出を費用管理ツールとして使用している場合、メール通知は、費用をタイムリーに管理する最適な方法でない場合があります。プログラムによる通知を設定して使用すると、費用管理レスポンスを自動化できます。自動化された費用管理レスポンスの例には、次のようなものがあります。
制限事項
予算では Cloud Billing の予測データが使用されます。予測請求額は、最終的な請求書が確定するまでは変わる可能性があります。
組織のポリシーをドメインごとにリソース共有を制限するように設定すると(Pub/Sub トピックで
enforceInTransit
を有効にするなど)、Pub/Sub トピックの設定や接続の際にエラーが発生する可能性があります。この場合、Pub/Sub トピックを予算に正しく関連付けるには、アカウントへの強制アクセスが必要になることがあります。アカウントへのアクセス権を強制的に付与するには、次の手順を行います。- ドメインの制限を含む組織のポリシーを、次のいずれかの方法で削除します。
- 手順に沿って、Pub/Sub トピックを接続します。
- 組織またはプロジェクトの組織のポリシーを復元します(省略可)。
このタスクに必要な権限
予算通知
プログラムによる予算通知を設定するには、予算と Pub/Sub トピックを作成または変更する権限が必要です。必要な権限は、アクセスのレベルに応じて異なります。
Cloud 請求先アカウントの権限を持つユーザー | プロジェクト レベルの権限のみを持つユーザー(プレビュー) |
---|---|
組織で認証にカスタムロールを使用する場合は、カスタムロールに次の権限が必要です。
既存の Cloud Billing 予算を変更して既存の Pub/Sub トピックに関連付けるカスタムロールには、次の権限が必要です。
事前定義ロールを使用して必要な権限を付与するには、Cloud 請求先アカウントに次のいずれかの Cloud Billing IAM 事前定義ロールを付与するように管理者へ依頼してください。 Pub/Sub トピックを含む対象プロジェクトに対して、次のロールを付与するように管理者へ依頼してください。 |
組織で認証にカスタムロールを使用する場合は、カスタムロールに次の権限が必要です。
事前定義ロールを使用して必要な権限を付与するには、プロジェクトに対する次のいずれかの Cloud Billing IAM 事前定義ロールを付与するように管理者へ依頼してください。 Pub/Sub トピックを含む対象プロジェクトに対して、次のロールを付与するように管理者へ依頼してください。 |
異常通知
プログラムによる異常通知を設定するには、異常と Pub/Sub トピックを作成または変更する権限が必要です。Cloud 請求先アカウントの権限が必要です。
Cloud 請求先アカウントの権限を持つユーザー(プレビュー) |
---|
事前定義ロールを使用して必要な権限を付与するには、Cloud 請求先アカウントに次のいずれかの Cloud Billing IAM 事前定義ロールを付与するように管理者へ依頼してください。 Pub/Sub トピックを含む対象プロジェクトに対して、次のロールを付与するように管理者へ依頼してください。 |
Pub/Sub トピックを作成する
プログラムによる予算通知または異常通知を設定するには、まず Pub/Sub トピックを作成する必要があります。予算または費用の異常な値の Pub/Sub トピックをすでに構成している場合、この手順はスキップできます。
Google Cloud コンソールの [Pub/Sub] ページに移動します。
Pub/Sub トピックを含むプロジェクトを選択します。
課金通知用の Pub/Sub トピックを構成する場合は、FinOps 管理プロジェクトを使用して、課金関連の Pub/Sub トピックを含めることをおすすめします。
[
トピックを作成] をクリックします。[トピック ID] フィールドに、トピック名を入力します。
デフォルトのサブスクリプションと暗号化の設定を保持し、[作成] をクリックします。
Pub/Sub トピックを接続する
予算または異常の現在のステータスを含む Pub/Sub メッセージを受け取るようにプログラムによる通知を有効にするには、予算または異常を Pub/Sub トピックに接続する必要があります。
予算通知
Pub/Sub トピックを Cloud Billing 予算に関連付けるには、次の手順を行います。
Cloud 請求先アカウントの権限を持つユーザー | プロジェクト レベルの権限のみを持つユーザー(プレビュー) |
---|---|
|
|
異常通知
Pub/Sub トピックを費用の異常と接続するには、次の手順を行います。
Cloud 請求先アカウントの権限を持つユーザー(プレビュー) |
---|
|
通知形式
Pub/Sub トピックに送信される通知は、次の 2 つの部分で構成されます。
- 属性: イベントを記述する Key-Value ペア。
データ: 予算アラートの詳細を記述する JSON オブジェクトを含む文字列。
予算通知
属性
属性は、Cloud Billing から Pub/Sub トピックに送信されるすべての通知に含まれる Key-Value ペアです。通知ペイロードに関係なく、通知には次の Key-Value ペアのセットが含まれます。
属性名 | 例 | 説明 |
---|---|---|
billingAccountId |
01D4EE-079462-DFD6EC
|
予算を所有する Cloud 請求先アカウントの ID。 |
budgetId |
de72f49d-779b-4945-a127-4d6ce8def0bb
|
Cloud 請求先アカウント内の予算アラートの ID。 |
schemaVersion |
1.0
|
通知のスキーマ バージョン。 |
データ
予算アラートの詳細は、base64 でエンコードされた UTF-8 文字列で返されます。これには、次のプロパティを持つ JSON オブジェクトが含まれています。
データ | 例 | 説明 |
---|---|---|
budgetDisplayName
|
"My Personal Budget"
|
予算に割り当てられた、人が読める形式の名前。 |
costAmount
|
140.321
|
発生した費用。追跡されるコストのタイプは、予算のフィルタと設定によって異なります。 |
costIntervalStart
|
"2021-02-01T08:00:00Z"
|
予算アラート期間の開始。costAmount には、この時点から使用が開始されたコストが含まれます。これは、予算の使用が発生した予算期間(月、四半期、年、指定の期間)の最初の日です。 |
budgetAmount
|
152.557
|
予算に割り当てられた金額。 |
budgetAmountType
|
"SPECIFIED_AMOUNT"
|
予算の金額タイプ。次のいずれかの値です。
|
alertThresholdExceeded
|
0.9
|
最大の費用の実値のしきい値。これを超えるとアラートが通知されます。値は 10 進数形式のパーセントです(たとえば、0.9 は 90% です)。費用の実値がしきい値を超えない場合、このキーは存在しません。 |
forecastThresholdExceeded
|
0.2
|
最大の予測費用アラートのしきい値。これを超えるとアラートが通知されます。値は 10 進数形式のパーセントです(たとえば、0.2 は 20% です)。予測費用がしきい値を超えない場合、このキーは存在しません。 |
currencyCode
|
"USD"
|
予算アラートの通貨。すべての費用と予算アラートの金額はこの通貨で表示されます。 |
異常通知
属性
属性は、Cloud Billing から Pub/Sub トピックに送信されるすべての通知に含まれる Key-Value ペアです。通知ペイロードに関係なく、通知には次の Key-Value ペアのセットが含まれます。
属性名 | 例 | 説明 |
---|---|---|
scope |
scope_project
|
異常の範囲。 |
billingAccountName |
billingAccounts/01D4EE-079462-DFD6EC
|
異常が発生した Cloud 請求先アカウントの ID。 |
resourceDisplayName |
My project
|
異常が発生したリソースの表示名。 |
resourceName |
projects/123456
|
異常が発生したリソースの ID。 |
SchemaVersion |
1.0
|
Pub/Sub スキーマのバージョン。 |
データ
異常アラートの詳細は、base64 でエンコードされた UTF-8 文字列で返されます。これには、次のプロパティを持つ JSON オブジェクトが含まれています。
データ | 例 | 説明 |
---|---|---|
anomalyName
|
billingAccounts/01D4EE-079462-DFD6EC/anomalies/aaa
|
異常のリソース名。 |
billingAccountName
|
billingAccounts/01D4EE-079462-DFD6EC
|
請求先アカウントの ID。 |
resourceName
|
"projects/12345"
|
異常が発生したリソースの ID。 |
resourceDisplayName
|
"My project"
|
異常が発生したリソースの表示名。 |
detectionDate
|
"2024-02-01T08:00:00Z"
|
費用の異常が検出された日付。 |
Scope
|
SCOPE_PROJECT
|
異常の範囲を示します。 |
expectedSpendAmount
|
{
|
リソースの予測費用。 |
actualSpendAmount
|
196.22
|
リソースの実際の費用。 |
deviationAmount
|
31.01
|
実際の費用と予測費用の乖離額。 |
deviationPercentage
|
18.77
|
予測費用に対する乖離額の割合。 |
Root cause
|
root_causes { resource: "services/XXX-XXXX-XXX" display_name: "BigQuery" cause_type: CAUSE_TYPE_SERVICE deviation { expected_spend { currency_code: "USD" units: "5000" } actual_spend { currency_code: "USD" units: "5000" } deviation_amount { currency_code: "USD" units: "5000" } deviation_percentage: "Infinity" } sub_causes { resource: "locations/us-west1", display_name: "us-west1", cause_type: CAUSE_TYPE_LOCATION, deviation { expected_spend { currency_code: "USD", } actual_spend { currency_code: "USD", units:"5000" } deviation_amount { currency_code: "USD", units: "5000" } deviation_percentage: "Infinity" } sub_causes { resource: "services/XXXX-XXXX-XXXX/skus/XXXX-XXXX-XXXX" display_name: "Some display name" cause_type: CAUSE_TYPE_SKU deviation { expected_spend { currency_code: "USD" } actual_spend { currency_code: "USD" units: 5000 } deviation_amount { currency_code: "USD" units: 5000 } deviation_percentage: "Infinity" } } sub_causes { resource: "services/XXXX-XXXX-XXXX/skus/XXXX-XXXX-XXXX" display_name: "Some display name" cause_type: CAUSE_TYPE_SKU deviation { expected_spend { currency_code: "USD" units: "1" nanos: 5413077 } actual_spend { currency_code: "USD" units: "1", nanos: 122606000 } deviation_amount { currency_code: "USD" nanos: 117192923 } deviation_percentage:11.656196419841217 } } } } |
異常の根本原因に関する情報を含む繰り返しフィールド。 |
Pub/Sub への通知の配信保証
予算または異常を Pub/Sub トピックに接続すると、プログラムによる通知が次のように届きます。
予算通知
- 予算通知は、予算の現在のステータスとともに 1 日に数回、Pub/Sub トピックに送信されます。この頻度は、予算アラートメールの頻度とは異なります。予算アラートメールは、予算しきい値に達したときにのみ送信されます。
- Pub/Sub 通知は、Cloud 請求先アカウントで使用量がない場合にも送信されます。
- 最初の Pub/Sub 通知を受け取るまで数時間かかる場合があります。
- Pub/Sub は at-least-once(最低 1 回)配信のみを保証します。メッセージが複数回送信されたり、メッセージが順不同で到着したりする場合があります。
- Pub/Sub トピックの構成ミスにより配信に失敗した場合、通知は表示されません。
次のいずれか 1 つの理由により、配信が失敗することがあります。
- Pub/Sub トピックが存在しない。
- Cloud Billing に Pub/Sub トピックへのパブリッシュ権限がない。
- 通知の割り当てを超過した。
- ドメインごとにリソース共有を制限する組織のポリシーが設定されている。
異常通知
- 異常通知は、しきい値に達した場合にのみ Pub/Sub トピックに送信されます。
- Pub/Sub は at-least-once(最低 1 回)配信のみを保証します。メッセージが複数回送信されたり、メッセージが順不同で到着したりする場合があります。
- Pub/Sub トピックの構成ミスにより配信に失敗した場合、通知は表示されません。
次のいずれか 1 つの理由により、配信が失敗することがあります。
- Pub/Sub トピックが存在しない。
- Cloud 請求先アカウントに Pub/Sub トピックへのパブリッシュ権限がない。
- 通知の割り当てを超過した。
- ドメインごとにリソース共有を制限する組織のポリシーが設定されている。
詳細については、Pub/Sub にメッセージをパブリッシュし、受信するをご覧ください。
次のステップ
プログラムによる通知の使用方法についての詳細は、プログラムによる費用管理レスポンスの例をご覧ください。