こんにちは、G-gen の荒井です。
今回はコスト削減にも繋がる VMインスタンス (Compute Engine) の起動・終了をスケジューリングする設定をご紹介いたします。
概要
Google Cloud のVMインスタンス (Compute Engine) では、VMインスタンスの起動・終了をスケジューリングすることができます。
今回はその設定方法をご紹介いたします。
起動・終了をスケジューリングするメリット
Google Cloud をはじめとするパブリッククラウドでは、リソースを使用しただけ課金が発生する従量課金方式となっていることがほとんどです。
そのためVMインスタンスを起動しっぱなしにしておくと常に課金が発生します。
反面、業務時間外である深夜帯などにVMインスタンスをシャットダウンしておくことでコスト削減を図ることができます。
スナップショットへの影響
深夜にVMインスタンスをシャットダウンさせておくとなると心配されるのがスナップショット(バックアップ)ですが、Google Cloud のスナップショットはVMインスタンスがシャットダウン中でも取得することが可能ですので心配は不要です。
むしろ、ファイルシステムに読み書きがない状態でバックアップを取るので、何らかのアプリケーションが動作しているサーバでも確実な整合性を持ったスナップショットが取れるという点では、メリットでもあります。
VMインスタンス シャットダウン時の動作仕様
VMインスタンス終了時の動作ですが、Google Cloud がVMインスタンスのOSに ACPI シャットダウン信号 を送信しOSがシャットダウンを開始します。
そのため物理サーバーで言う「電源を抜く」イメージではなく、OSからシャットダウンをさせるイメージになります。
シャットダウン動作に関する詳細項については、下記を御覧ください。
cloud.google.com
制限事項
- VMインスタンスの自動終了はOSのシャットダウンを実行するだけの動作となります。OS上のサービスを順番に終了させるような機能は持ち合わせていません。 そのためアプリケーション仕様により、サービスを順番に終了した後OSをシャットダウンをさせるような運用には向いていません。
- スケジュールのオペレーションは最大15分程度遅延することがあります。そのため指定時間にVMインスタンスを起動させたい場合、指定時間の15分前でスケジューリング設定をする必要があります。起動・終了の間隔は15分以上空けてスケジューリングを行います。
その他、詳細な制限事項については下記ページの「制限事項」を御覧ください。 cloud.google.com
設定方法
Google Cloud でVMインスタンスを自動起動・終了をスケジューリングする設定方法をご紹介いたします。
Compute Engine サービス エージェント 権限付与
VMインスタンスの自動起動・終了は Google Cloud のシステム専用アカウント(サービス エージェント)から実行されます。そのため、まず サービス エージェント に必要な権限を付与します。
サービスエージェントとは
サービス エージェントとは、おおまかに言ってしまうと Google Cloud システムが使用する専用アカウントになります。(サービスアカウントとは別です)
サービス エージェント についての詳細は、下記を御覧ください。
Compute Engine に関する サービス エージェント については、下記を御覧ください。
付与する権限は以下のとおりです。
compute.instances.start
: VM インスタンスの起動をスケジュールします。compute.instances.stop
: VM インスタンスの停止をスケジュールします。
上記を包括する権限であればどういったものでも構いません。
今回は事前定義ロールとして用意されている Compute インスタンス管理者(v1)(roles/compute.instanceAdmin.v1)
を付与します。
Cloud Console
> IAM と管理
> IAM
をクリック
Google 提供のロール付与を含める
を有効にする
service-(PROJECT_NUMBER)@compute-system.iam.gserviceaccount.com
の 編集
をクリック
Compute インスタンス管理者(v1)(roles/compute.instanceAdmin.v1)
の事前定義ロールを追加し 保存
をクリック
Compute インスタンス管理者(v1)
が付与されていることを確認
スケジュール作成
Compute Engine
> VMインスタンス
をクリック
インスタンス スケジュール
をクリック
スケジュールを作成
をクリック
「新しいスケジュールの作成」ウインドウで、パラメータを入力し 送信
をクリック
スケジュールが作成されていることを確認
スケジュール編集
現在のところ、作成したスケジュールを編集することはできません。 スケジュールの内容を編集したい際は、スケジュールを再作成します。
スケジュールへVMインスタンスをアタッチ(追加)
作成したスケジュールをクリック
スケジュールにインスタンスを追加
をクリック
スケジュールに追加したい インスタンス
を選択し 追加
をクリック
※ 追加したいインスタンスが表示されていない場合、スケジュールとインスタンスのリージョン(ゾーン)が一致しているか確認をしてください。
指定インスタンスが追加されていることを確認
新規VM インスタンス作成時にスケジュールをアタッチ
新規VMインスタンス作成の際にスケジュールをアタッチしたい場合、Cloud Console (GUI) ではスケジュールをアタッチすることはできません。
そのため gcloud (CLI) を使用します。
gcloud compute instances create (INSTANCE_NAME) \ --resource-policies=(SCHEDULE_NAME) \ [--zone=(ZONE)] \ [--image (IMAGE) | --image-family (IMAGE_FAMILY)] \ [--image-project (IMAGE_PROJECT)]
※ ( ) 内のパラメータは任意で指定します。
gcloud compute instances create
に関する詳細は以下をご参照ください。
cloud.google.com
インスタンスのデタッチ(削除)
作成したスケジュールをクリック
デタッチしたいインスタンスを選択し スケジュールからインスタンスを削除
をクリック
スケジュール削除
作成したスケジュールをクリック
削除
をクリック
削除
をクリック
スケジュールが削除されていることを確認
参考リンク
今回ご紹介した Compute Engine に関する情報は、以下の記事をご覧ください。
荒井 雄基 (記事一覧)
クラウドソリューション部
オンプレ環境のネットワーク・サーバーシステムを主戦場としていたが、クラウド領域にシフト。
Google Cloud 認定資格 7冠
現在は Google Workspace を中心に企業の DX 推進をサポート。
最近頑張っていることは、子どもがハマっている戦隊モノの踊りを踊れるようになること。