https://cloud.google.com/compute/docs/instances/schedule-instance-start-stop?hl=ja
https://cloud.google.com/iam/docs/manage-access-service-accounts?hl=ja
https://cloud.google.com/iam/docs/creating-custom-roles?hl=ja#iam-custom-roles-create-gcloud
https://dev.classmethod.jp/articles/gce-instance-scheduling-gui/
スケジュールされた VM インスタンスは、起動オペレーションまたは停止オペレーションを開始するスケジュール時刻よりも最大 15 分遅れることがあります。
インスタンス スケジュールを使用するには、プロジェクトの Compute Engine サービス エージェントに次の権限が必要です。
compute.instances.start: VM インスタンスの起動をスケジュールします。
compute.instances.stop: VM インスタンスの停止をスケジュールします。
-- 1. 前作業
gcloud init
gcloud auth list
gcloud --version
gcloud projects create project01-9999999 \
--name="project01"
gcloud projects list
gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-a --quiet
gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111
gcloud services enable compute.googleapis.com --project project01-9999999
gcloud components update
-- 2. Compute Engine サービス エージェントへの権限付与
-- 2.1 カスタムロールの作成
title: role01
description: role01
stage: GA
includedPermissions:
- compute.instances.start
- compute.instances.stop
gcloud iam roles create role01 \
--project=project01-9999999 \
--file=a.yaml
gcloud iam roles list \
--project=project01-9999999
-- 2.2 サービスアカウントへのカスタムロールの付与
Googleが管理するサービスアカウントはコマンドで実行できない模様のため、コンソールから実行
対象サービスアカウント: service-111111111111@compute-system.iam.gserviceaccount.com
付与するロール: role01
gcloud iam service-accounts list
→ Googleが管理するサービスアカウントは表示されない
-- 3. インスタンススケジュールを作成する
gcloud compute resource-policies create instance-schedule schedule01 \
--description='schedule01' \
--vm-start-schedule='00 10 * * *' \
--vm-stop-schedule='30 9 * * *' \
--timezone=UTC \
--initiation-date=2022-12-10T09:30:00Z \
--end-date=2022-12-11T00:00:00Z
gcloud compute resource-policies list
gcloud compute resource-policies describe schedule01
gcloud compute instances create vm01 \
--machine-type=e2-micro \
--image-project=centos-cloud \
--image=centos-7-v20221004 \
--provisioning-model=SPOT \
--instance-termination-action=DELETE \
--zone=asia-northeast1-a
gcloud compute instances list
gcloud compute instances describe vm01
-- 5. インスタンススケジュールを既存のVMインスタンスに接続する
gcloud compute instances add-resource-policies vm01 \
--resource-policies=schedule01
-- 6. 動作確認
スケジュールどおり、vmが停止と起動することを確認
-- 7. クリーンアップ
gcloud projects list
gcloud projects delete project01-9999999