{GCP Compute Engine}vm起動停止自動化

 

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 カスタムロールの作成


vim a.yaml

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

 

-- 4. vmインスタンス作成


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