Google Cloudのプロジェクトレベルのラベルについて

# はじめに
Google Cloudには、タグとラベルという概念があります。
タグは権限管理の機能で、ラベルはリソースの整理や請求管理の機能になります。

今回はラベルに絞った、特にプロジェクトに割り当てるラベル（プロジェクトレベルのラベル）の活用方法について調べたことをまとめます。

# ラベルについて
ラベルとは、Google Cloudのリソースにkey:valueのメタデータを割り当てる機能です。割り当てたラベルによってリソースを整理することができます。
リソースを管理するチーム・所有者、プロダクト、環境など用途に応じた複数のkey:valueを設定しリソースを効率的に整理することができます。（リソースレベルのラベル。）

また、[Billing機能でラベルごとにリソースを絞り込むこと](https://cloud.google.com/billing/docs/concepts?hl=ja#labels)が可能です。

これを用いることで、例えば以下のように複数のプロダクト・チームが複数のプロジェクトを利用している場合、そのラベルごとにフィルタリングすることができます。

```
プロジェクトA
  GCEインスタンス: リソース名 project-a-instance-01
    - product: hoge
    - team: apple
  GCEインスタンス: リソース名 project-a-instance-02
    - product: fuga
    - team: apple
プロジェクトB
  Cloud SQL: リソース名 project-b-db
    - product: fuga
    - team: apple
プロジェクトC
  GCEインスタンス: リソース名 project-c-instance
    - product: hoge
    - team: melon
```
- `product:hoge` のラベルでフィルターした場合、プロジェクトAのGCEインスタンスと、プロジェクトCのGCEインスタンスのコストを取得することができます。
- `team:apple` のラベルでフィルターした場合、プロジェクトAのGCEインスタンスと、プロジェクトBのCloud SQLのコストを取得することができます。
- プロジェクトAに絞り込んだ状態で`product`でフィルターすることで、hogeプロダクトと、fugaプロダクトがプロジェクトA内でそれぞれコストをいくら使用しているか、ということを把握することができます。

# プロジェクトのラベルについて
先ほど、「リソースに対してラベルを割り当てることができる」と記載しました。
リソースの他にも、Google Cloudプロジェクトに対してラベルを割り当てることができます。

## 設定方法
プロジェクトのIAMを開き、左メニューの**ラベル**を選択し、**ラベルの追加**から可能です。
![スクリーンショット 2024-02-13 18.27.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3328969/35de9e91-692c-b3d5-b48f-cce6224f2ceb.png)

## 使用方法
### プロジェクト一覧
主な使用方法は、プロジェクトの一覧でラベルで検索することが可能です。
1. Resoure Manager（リソースの管理）のフィルター欄で、**ラベル**を選択します。![スクリーンショット 2024-02-13 18.29.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3328969/199ed822-5b48-3238-ce55-ee90170913a2.png)
1. 任意のキーを入力します。サジェストでvalueもでます。![スクリーンショット 2024-02-13 18.32.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3328969/fa4d2c1b-b501-9fe1-8006-f401a257f962.png)

 ### Billingエクスポート
 ※Billingのエクスポート機能については説明を省略します。Appendixを参照ください。

 
[標準的なBillingのエクスポートデータ](https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/standard-usage?hl=ja)にはラベル(`labels`)が含まれていますが、プロジェクトレベルのラベル(`project.labels`)も含まれています。

これを用いることで、例えばプロジェクトに割り当てられているラベルごとにコストをグルーピングすることができます。

Billingコンソールでは、プロジェクトを任意に選択してコストをグルーピングすることができます。しかし、プログラムで実行しようとする場合は、プロジェクト名などを指定する必要があります。
また、プロジェクトの増減にも対応する必要があります。ラベルを設定する運用ができていると、このような運用の煩わしさを軽減することができます。

# おわりに
Google Cloudでは、常に標準化したラベルを割り当てることを[ベストプラクティス](https://cloud.google.com/resource-manager/docs/best-practices-labels?hl=ja)としています。基本的には使用するリソースすべてにラベルを割り当てることが望ましいです。

リソースレベルのラベルを割り当てることで様々なメリットを受けることができますが、他方で、既存のリソースにラベルをゼロから割り当てる際は、かなりの工数が発生します。その中でプロジェクトレベルのラベルはIAMコンソールから簡単に付与することが可能です。

Google Cloud全体でコスト可視化を考える際、プロジェクトの運用方法にもよりますが、プロジェクトレベルのラベルの割り当てで事足りるようなケースもあり得ます。
（1つのproductで完結する、1つのチームで完結する、など。）


このようなケースでBillingエクスポートデータからコストを集計する際は、プロジェクトレベルのラベルを使用することで集計が可能になります。可視化の第一歩として、プロジェクトレベルのラベル割り当てから検討するのも1つの手段かもしれません。

# Appendix
[タグとラベルの違いについて (Tags / Labels)
](https://blog.g-gen.co.jp/entry/difference-between-tags-and-labels)
[プロジェクトのラベルを作成、更新する ](https://cloud.google.com/resource-manager/docs/creating-managing-labels?hl=ja)
[Cloud Billing データを BigQuery にエクスポートする](https://cloud.google.com/billing/docs/how-to/export-data-bigquery?hl=ja)