はじめに

Google Cloud の検証環境を新たに利⽤するにあたって、費⽤削減を意識し、AWS の EventBridgeScheduler で⾏えるようなインスタンスの⾃動停⽌が、Google Cloud でも⾏えるか、確認しましたので、その内容と⼿順について記載します。

概要

クラウドコンピューティングのコスト削減について

Google Cloud ではコスト削減として、推奨事項をコンソールでわかりやすく提⽰し、リソース使⽤状況から、新たなインスタンスタイプを提⽰してくれたり、余計なリソースが無いか、を確認してくれたりします。
VMのコンソール上だと以下のようにわかりやすく提⽰されます。
※⾚枠箇所が推奨事項により⾒込める費⽤削減の⾦額が表⽰されています。

またダッシュボード遷移時の推奨事項タブでは⾊々な推奨事項が表⽰され、例えば、 GCE とCloud SQLで費⽤削減が⾒込めそうな⾦額が表⽰されます。

ちょっとした油断でコストの肥⼤化に繋がってしまうので、こういった機能の活⽤も⼤事ですが、そもそも開発環境や我々が検証するような環境で、停⽌忘れを防ぐために、定期的な⾃動停⽌を Google Cloud で導⼊したいと考えています。

スケジュールによるインスタンス停⽌

Google Cloud にインスタンススケジュールという機能がありますので、その機能を利⽤して、GCE の⾃動停⽌を⾏っていきます。
インスタンススケジュールとは、cron式などを利⽤して、起動、停⽌をスケジュールすることが可能で、定期的な停⽌や起動を⾏うことが可能です。

詳細

⼿順

事前準備

サービスエージェントに付与するRoleを準備し、サービスエージェントへ適⽤します。
詳細にはこちらに記載がありますが、サービスエージェントとは、Compute サービスエージェントと呼ばれるデフォルトで作成されるサービスアカウントです。
このサービスアカウントに compute.instances.startcompute.instances.stop の権限を付与したRole を適⽤します。

権限付与にあたって作成したRole

サービスエージェントへRoleを付与

インスタンススケジュール作成

GCEのメニュー画⾯へ遷移し、インスタンススケジュールを選択します。

スケジュール作成画⾯にてスケジュール名、適⽤するVMがあるリージョン、起動・停⽌時間をcron式で⼊⼒します(cron式でない⼊⼒も可能)。

今回は⼊⼒し、以下のように作成しました。
停⽌が⽬的であったため、停⽌のcron式のみを⼊⼒しています。
こちらの画⾯ではすでに停⽌対象のインスタンスが選択されていますが、次の画⾯で停⽌対象の選択について記載します。

スケジュールにインスタンスの追加より、以下の画⾯で対象のインスタンスを選択します。

選択して追加することで、すでに掲載済みの以下のように、スケジュール対象のインスタンスが表⽰されるようになります。

※インスタンススケジュール作成の時点でエラーになる場合、事前作業が漏れている可能性が⾼く、その場合には、権限不⾜である旨、表⽰されます。

上記の設定を⾏うことで、h-saito-test02は無事19:30に⾃動でインスタンスの停⽌を⾏うことができました。

注意事項

  • 事前準備のサービスアカウントは個々のGCEのサービスアカウントではありません(最初勘違いしました)。
  • インスタンススケジュールを設定すると、対象へのインスタンスの追加、削除は可能ですが、スケジュールの時間変更は再作成が必要になります。

所感

基礎的な内容ではありますが、意図的に停⽌する、というのは忘れることもあるので、地味に⼤事なことだと感じました。
もっと抜本的な部分で費⽤削減が⾒込めるケースも多いかもしれませんが、まずはこういった⼩さなところから⾏うことで、コストの意識を持ち、少しづつコスト削減に取り組み、最適化できるようにしていくと、良いと思いました。
推奨事項の利⽤はもちろんですが、その他でも引き続き費⽤削減を⾏う⼯夫をしていきたいと思います。