🦀

GCE Instance の自動起動および自動停止が出来る Instance Schedule の紹介と命名規則を考える

2024/07/31に公開

こんにちは。 ワタシハ ケンケツ チョットデキル でお馴染みの五十嵐です
( 詳しくは GitHub を参照してください )

本日は Compute Engine (以下、GCE) の一機能を紹介します
皆さんの Google Cloud の設計の参考にして下さい :)

Instance Schedule とは

Instance Schedule (以下、インスタンススケジュール) を使用すると、GCE Instance の起動と停止を自動化する設定ができます

https://cloud.google.com/compute/docs/instances/schedule-instance-start-stop?hl=en

従来は Cloud Scheduler と Cloud Functions を利用して実装していたアーキテクトですが、この機能によりアーキテクトの選択肢が増えました :)

https://cloud.google.com/scheduler/docs/start-and-stop-compute-engine-instances-on-a-schedule?hl=en

インスタンススケジュールを使用することによるメリット・デメリット

  • メリット
    • GCE 内の設定のみで完結するので、管理が容易であること (IAM の設定は別途必要)
  • デメリット
    • 起動・停止 (両方もしくは片方のみ) 以外の設定ができないため、GCE Instance を起動・停止する前に他の処理を入れ込むことができない (※ VM 内の操作であれば Start Script などで実装は可能です)

設定方法

  1. インスタンススケジュールを作成
  2. GCE Instance を 新規で作成する時にインスタンススケジュールを設定

もしくは

  1. インスタンススケジュールを作成
  2. 既存の GCE Instance にアタッチ

になります

詳しくは公式ドキュメントを参照して下さい

https://cloud.google.com/compute/docs/instances/schedule-instance-start-stop?hl=en

運用方法

  • 開発環境の GCE Instance は基本的に自動停止の設定を入れる = コスト削減のため
  • 本番環境の GCE Instance は基本的に自動停止の設定を入れない

ただし、バッチ処理などで必要な場合を除きます
バッチ処理であれば、GCE ではなく、Cloud Run Jobs などの PaaS に移行することも検討しても良いかもしれませんね ;)

命名規則を考える

インスタンススケジュールの特性上、以下のことに注意しなければなりません

  • インスタンススケジュールのリージョンと GCE Instance のリージョンは同じでなければいけない
  • インスタンススケジュールと GCE Instance の関係は 1:N である

上記を踏まえて、インスタンススケジュールの運用方法や命名規則について少し考えてみましょう ;)
インスタンススケジュールは後から編集できないことも踏まえて

  • 命名規則例
{{ リージョン名 }}-{{ 起動や停止の時間 }}-{{ 頻度 }}

とすると良いでしょう :)

  • 命名規則の具体例
    • s = 開始時刻 (start)、 e = 停止時刻 (end) としています
### 東京リージョンにて、毎朝8時に起動、毎夜20時に停止
asia-northeast1-s08e20-daily
### 東京リージョンにて、毎夜18時に停止
asia-northeast1-e18-daily
### アイオワリージョンにて、毎週水曜の朝10時に起動、毎週水曜の夜16時に停止
us-central1-s10e16-wed
  • 命名規則の解説

どのリージョンの設定なのか?が大事なので、名前にリージョンが入っているといいでしょう。
地区名でもいいですが、地区名とリージョン名を誰もがすぐに分かるわけではないのでリージョン名に統一しておくと良いと思います

時間や頻度に関しても重要なファクターなので入れておくと良いと思います
また - をフィールド区切り文字の識別子として使えるように、起動と停止の時間の項目は書き方を工夫しています

まとめ

あくまで命名規則なので、みなさんの設計の参考にしていただければと思います :)

Have a nice day! ;D

Discussion