はじめに
皆さんもクラウドのコスト最適化、推進してますか?
クラウドを利用するにあたってやはり気になるのは「誰かが建てて、そのまま放置されている」リソース。
所謂野良リソースがどこにどれくらいあるか、ではないでしょうか。
当記事ではこの悩みを「Cloud Asset Inventory」というサービスを使用して解決していきたいと思います。
前提条件
・cloudasset.googleapis.comを有効化済であること
・調査したい組織(またはプロジェクト)に対するIAM権限を有していること
そもそもCloud Asset Inventoryとは?
Cloud Asset Inventoryとは簡単に言えば
「組織(Organization)やフォルダ配下の 全プロジェクトのリソース情報を自動で収集・保存」してくれるサービスです。
もう少し詳しく解説すると、当サービスは「リソース把握」「セキュリティ」「ガバナンス」において有用な3つの機能を持っています。
今回はリソース把握をテーマにしているため、深くは説明しませんが……過剰なIAM権限の検出、リソースの作成、変更等の監査と便利な機能が揃っています。
普通にlistコマンドでよいのでは?
確かに一つのプロジェクト内であれば、得られる結果に大差はありません。
画像のように検証環境にインスタンスを3つ用意して、それぞれコマンドを実行した結果が以下です。
・Cloud Asset Inventoryの場合
NAME: //compute.googleapis.com/projects/hogehoge/zones/us-central1-c/instances/test-3
MACHINE_TYPE: custom-1-1024
LOCATION: us-central1-c
STATE: RUNNING
NAME: //compute.googleapis.com/projects/hogehoge/zones/asia-northeast1-a/instances/test-1
MACHINE_TYPE: custom-1-1024
LOCATION: asia-northeast1-a
STATE: RUNNING
・listコマンドの場合
NAME: test-3
ZONE: us-central1-c
MACHINE_TYPE: custom-1-1024
STATUS: RUNNING
NAME: test-1
ZONE: asia-northeast1-a
MACHINE_TYPE: custom-1-1024
STATUS: RUNNING
どちらも、稼働中のtest-1とtest-3のみを表示していますね。
ですが、listコマンドはあくまでプロジェクト単位で動作します。
組織配下に複数のプロジェクトが存在すれば、その数の分listコマンドを叩く必要がありますが……現実的ではありません。
しかし、Cloud Asset Invetoryであれば一発です。
gcloud asset search-all-resources \
--scope=organizations/YOUR_ORGANIZATIONS_ID \
--asset-types="compute.googleapis.com/Instance" \
--query="state:RUNNING" \
--format="table(name, additionalAttributes.machineType, location, state)"
このコマンドで組織配下の全稼働中Compute Engineインスタンスが把握できます。
おわりに
以上で、Cloud Asset Inventoryを使用した野良リソースの探索は完了となります。
今回は手動での実行例でしたが、Cloud Scheduler や Cloud Functions と組み合わせて定期実行・通知を行えば、「野良リソース検知」と「コスト最適化」の自動化も夢ではありません。
Cloud Asset Inventory自体は無料(ただし、データの保存・転送に係る費用は別)ですし
年末の大掃除ついでに、クラウド環境の大掃除も準備してみてはいかがでしょうか?
参考資料
