GCPのコスト削減 / 管理術(メタサイトの場合)
はじめに
こんにちわ、メタサイトのKHです。 今回はメタサイトで行っている、GoogleCloudPlatform(以後GCP)のコスト削減/管理の術を紹介させていただければと思います。
今回紹介するのは、2023/6/5日時点ですので、設定の際は最新の公式ドキュメントを参考いただければと思います。 (記事内に公式ドキュメントの導線は貼っておきます。)
管理/削減術
「予算とアラート」を仕掛けよう
まず最初にコスト管理の一環として、GCPプロジェクトを作成した場合は、「予算とアラート」を設定しましょう。
こちらは設定することで、意図しない多額の請求が発生していた場合の検知を行うことが出来ます。
例)以下の例ですと予算が毎月350ドルとしているので固定でセットしてます。
しきい値に到達するとメール通知等ができます。
おすすめの設定は
・各サービス毎に予算があると思うので、予算額を固定でセット
・もし予算がない場合は、前月の比に対してセット
もし当月の半ば頃に利用率が90%などになっていた場合に異常を察知し、対応することが出来ます。
設定は以下URLから。 https://console.cloud.google.com/billing/budgets
設定手順は以下のURLから。 https://cloud.google.com/billing/docs/how-to/budgets?hl=ja
VMインスタンスの自動停止しよう
次に紹介するのは、VMインスタンスの自動停止です。
GoogleComputeEngine(以後GCE)のVMインスタンスは稼働時間ベースで課金が発生します。
なので24h/365日で稼働させる必要がない、開発環境やSTG環境等を
業務時間外は停止することでコスト削減することが出来ます。
VMインスタンスの自動停止の設定は、以下のURLから。
https://cloud.google.com/compute/docs/instances/schedule-instance-start-stop?hl=ja
例)VMインスタンスを平日の日中だけ起動させる設定
もし、祝日も含めVMインスタンスを停止したい場合はテックブログのこちらを参照ください。
https://tech.cm-group.co.jp/posts/gce-instance-scheduler
■削減例
VMインスタンスを平日の日中だけ起動させた場合
稼働時間ベースで、約720時間→396時間にすることができます。
(324時間削減)
料金にして最低スペックの場合でも(n1-standard-1)月間8.8ドルほど削減できます。
(稼働時間ベースで半分近くになっていますが、GCE/GKEには継続利用割引というものがあり半額になるという訳ではありません)
月間8.8ドルでも、サービスによってはサーバ複数台あることもあると思うので
チリツモになると思います。
GCP画面上だけでできる、VMインスタンススケジュールは設定とても簡単なのでおすすめです!
注意
VM上で設定している時間指定のバッチ処理等(cron等)は必要に応じて、時間を調整する等忘れずに行いましょう。
また、今回は割愛しますがCloudSQLもAPIやgcloudのCLIを用いる事で自動停止することができます。
DBも結構コスト掛かると思うのでぜひ検討をおすすめします。
https://cloud.google.com/sql/docs/mysql/start-stop-restart-instance?hl=ja#gcloud
最低スペック(db-standard-1)でも約22ドルほど削減可能です。
マシンリソースを見直そう
次に紹介するのは、マシンリソース(スペック)の調整です。
これはシンプルですが、サービスの使用リソースを見直しを行い、リソースを持て余している状況の場合
最適なスペックに調整を行います。
調整の程度はSLA等に依存するため、サービスの事業担当者と相談の上、設定するのがよいと思います。
(実施の際は自己責任でお願いします。)
■削減例
以下サーバのリソース状況を確認し、リソース調整を行いました。
n1-standard-4 → n1-standard-2
(4cpu/15gb) → (2cpu/8.5gb)
上記例の場合、56ドルほど削減可能です。
一定のCPU待ちが発生するリスクはありましたが、社内でのサービスである点や必要な監視が設定されていた背景から、上記の通り調整を行いました。
注意
・リソース見直した後の異常を検知できるよう、サービスの監視やリソース監視を忘れずに行いましょう。
・実施は自己責任でお願いします
ネットワークのコストを意識しよう
次はネットワークコストについてです。
こちらは今まで紹介した物と比べると少し手間が掛かるかもしれませんが意識しているのとしてないのではコストに直結するため紹介いたします。
GCPは基本的にVPC外へのトラフィック(内から外)は課金対象となります。
(一部料金例外等はあるので、詳細はこちら)
https://cloud.google.com/vpc/network-pricing?hl=ja#all-networking-pricing
そのため、サーバ側から外向けトラフィックを整理することでコスト削減が可能です。
GCPの料金レポート等を確認し、ネットワークコストが想定よりかかっている場合
一度アプリケーションのトラフィックを見直してみると良いと思います。
■削減例
以下料金レポートで3月まで発生していたNWコストが4月以降極端に少なくなっていると思います。
今回例としているサービスは、3月にアプリケーション改修を行いました。
訳あってこのサービスは、フォントファイルをサーバより配布していたのですが、
無料のwebフォントで代替可能だったため、そちらへ切替を行いました。
結果として、月間約600ドルほど削減できました。
無料枠を活用しよう
次はGCPの無料枠についてです。
GCPには毎月、無料で利用できる枠が存在します。
詳細はこちら。
https://cloud.google.com/free/docs/free-cloud-features?hl=ja#free-tier
基本的には意識しないで勝手に一定量無料となっていますが
サービスによっては特定リージョン下でのみ無料枠となるので知っておくと役立つかもしれません。
(GCEやGCS等)
■削減例
GCEで以下リージョンであれば、e2-microインスタンス(2c/1gb)が無償で利用可能です。
us-west1 / us-central1 / us-east1
東京リージョンで立てた場合は約8ドルになるので
通信品質にこだわらないケースであれば選択肢として覚えておくと良いと思います。
(Diskも標準ディスクであれば30GB無料です)
SpotVMを活用しよう
次に紹介するのはSpotVMです。
これは、GCEのVMインスタンスのコストを60%~91%ほど削減することが出来ますが、
いきなりVMインスタンスが停止させられる可能性があるサービスとなっています。
使い方として、Webサーバ等常にサービスを稼働させる必要があるサーバには向かないと思います。
短期間のバッチ処理等には向くかと思います。
SpotVMについての詳細はこちら。
https://cloud.google.com/compute/docs/instances/spot?hl=ja
SpotVMの作成自体も、画面上からでも以下の部分を選択するだけで容易に作成可能です。
■削減例
e2-standard-2をSpotVMとした場合
64ドル→23ドルと40ドルほど削減が可能です。
確約利用割引について
次は確約利用割引についてです。
GCPに対して、1年や3年などの期間、このぐらいのリソースやこのぐらいの金額の支払いを確約することで 値引きされる制度で、以下のサービスが対象となっています。
Cloud Run
Cloud Spanner
Cloud SQL
Compute Engine
Google Cloud VMware Engine
Google Kubernetes Engine
Memorystore
利用するサービスによって値引き額は異なり、
CloudSQL等の場合は現状1年契約で約25%、3年で約52%の割引になります。
こちらはまだメタサイトでは利用実績がないのですが、サービス提供が安定しているシステムで利用することでコストメリットを得られるかなと思っております。
詳細はこちら。
https://cloud.google.com/docs/cuds?hl=ja
定期的に利用料金の振り返りを行おう
最後に紹介するのは、少し番外編で直接的なコスト削減ではないのですが、メタサイトで行っている事として一つ紹介致します。
メタサイトでは、毎月の請求額を各サービスのシステムの管理者が確認を行っており、
先月からの請求額の差異の分析を行っています。
今月はこれだけアクセス数あったから、ネットワーク料増えるね。や今月こういうイベントあったから。。等
毎月的に行う事で、システムのコストに関して意識付けすることが出来ます。
さいごに
今回紹介させていただいた術を活用して、普段進行している開発プロジェクトの隙間時間の約2ヶ月間に、
月間22万/年間264万ほど削減することが出来ました。
この対応も社内に数あるサービスの中の一部の対応なので、全体を見直せばより削減できる見込みです。
こういったサーバコストを削減することで、事業の利益率向上に貢献する事ができます。
サーバコストはエンジニアのが意識し易い部分だと思うので今後も意識していきたいと思います。