GCE インスタンスのスケジュール設定をしよう¶
resonite の ヘッドレスサーバ を必要な時にだけ自動起動/自動停止する手順です。
前提条件¶
こちらでセットアップした Google Cloud Shell を利用して Google Cloud をコマンドラインから操作します。
インフラ設定用の環境変数を設定する¶
環境変数を読み込みます
source ~/resonite-headless-infra/scripts/env-headless-server.bash
環境変数が設定されたことを確認します
echo -e \
"RESONITE_HEADLESS_ENVIRONMENT\t\t=\t${RESONITE_HEADLESS_ENVIRONMENT}"\\n\
"VPC_NAME\t\t\t\t=\t${VPC_NAME}"\\n\
"SUBNET_NAME\t\t\t\t=\t${SUBNET_NAME}"\\n\
"REGION\t\t\t\t\t=\t${REGION}"\\n\
"SUBNET_RANGE\t\t\t\t=\t${SUBNET_RANGE}"\\n\
"RESONITE_HEADLESS_SERVER_INSTANCE_NAME\t=\t${RESONITE_HEADLESS_SERVER_INSTANCE_NAME}"\\n\
"IMAGE_PROJECT\t\t\t\t=\t${IMAGE_PROJECT}"\\n\
"IMAGE_FAMILY_SCOPE\t\t\t=\t${IMAGE_FAMILY_SCOPE}"\\n\
"IMAGE_FAMILY\t\t\t\t=\t${IMAGE_FAMILY}"\\n\
"ZONE\t\t\t\t\t=\t${ZONE}"\\n\
"SETUP_RESONITE_HEADLESS_SERVER_SCRIPT\t=\t${SETUP_RESONITE_HEADLESS_SERVER_SCRIPT}"\\n\
"MACHINE_TYPE\t\t=\t${MACHINE_TYPE}"\\n\
gcloud CLI の構成を設定します
PROJECT_NAME=$(gcloud config list --format="value(core.project)")
gcloud config set project ${PROJECT_NAME}
gcloud config set compute/zone ${ZONE}
gcloud config set compute/region ${REGION}
インスタンスを自動起動、自動停止する¶
Google Cloud のリファレンス「 VM インスタンスの起動と停止をスケジュールする 」を参考にしてください。
Compute Engine サービスエージェントに、権限を付与する¶
Compute Engine のサービスエージェントに roles/compute.instanceAdmin.v1 を付与する必要がある
プロジェクトIDを変数にします
PROJECT_ID=$(gcloud config list --format="value(core.project)")
プロジェクトナンバーを変数にする
PROJECT_NUMBER=$(gcloud projects list --filter="projectId=${PROJECT_ID}" --format="value(projectNumber)")
Compute Engine のサービスエージェント名を変数にします
COMPUTE_ENGINE_SERVICE_AGENT=service-${PROJECT_NUMBER}@compute-system.iam.gserviceaccount.com
ロール roles/compute.instanceAdmin.v1
を Compute Engine のサービスエージェントに付与します
gcloud projects add-iam-policy-binding ${PROJECT_ID} --member="serviceAccount:${COMPUTE_ENGINE_SERVICE_AGENT}" --role="roles/compute.instanceAdmin.v1"
インスタンススケジュールを作成する¶
スケジュール名を変数に入れます(任意)
SCHEDULE_NAME=kakko
スケジュールを作成します
# 例: 火曜日の 20:30 に起動して、毎日 0:00 に停止する
gcloud compute resource-policies create instance-schedule ${SCHEDULE_NAME} \
--region=${REGION} \
--vm-start-schedule='30 20 * * TUE' \
--vm-stop-schedule='0 0 * * *' \
--timezone=Japan
スケジュール一覧を出力します
gcloud compute resource-policies list
スケジュールを削除する
gcloud compute resource-policies delete ${SCHEDULE_NAME} --region=${REGION}
インスタンススケジュールをインスタンスに付与する
# インスタンス名を変数に入れる
RESONITE_HEADLESS_SERVER_INSTANCE_NAME=$(gcloud compute instances list --format="value(name)"|fzf)
# インスタンススケジュールを付与する
gcloud compute instances add-resource-policies ${RESONITE_HEADLESS_SERVER_INSTANCE_NAME} --resource-policies=${SCHEDULE_NAME}
# 外す
gcloud compute instances remove-resource-policies ${RESONITE_HEADLESS_SERVER_INSTANCE_NAME} --resource-policies=${SCHEDULE_NAME}
# インスタンス一覧(スケジュール表示)
gcloud compute instances list --format="table(name, resourcePolicies[0].basename(), zone, machineType, scheduling.preemptible, networkInterfaces[].accessConfigs[natIP], status)"
以上
明日の記事 へ続きます。
GCE インスタンス上の resonite ヘッドレスサーバ の Config を更新しよう
resonite ヘッドレスサーバの GCE インスタンスを複製しよう