Help us understand the problem. What is going on with this article?

GCE インスタンスの起動/停止を gcloud + cron でスケジューリングする

More than 1 year has passed since last update.

GCPクソザコが2日考えた末実現できた実装

前提 / 要件

  • 遊び
    • 動けばいい
  • 金なし
    • インスタンス起動時間を指定時間帯だけに絞りたい
    • 無料で実装したい
  • 暇なし
    • 手運用なし
  • 知識なし
    • GCE と最低限の gcloud コマンドだけ使う(しか使えない)

方針

  • 無料枠で f1-micro インスタンスを立て、常時起動のスケジューラとする
  • gcloud コマンドで指定インスタンスの起動停止を制御する
  • crond で gloud コマンドの実行をスケジューリングする

環境

  • スケジューラ用インスタンス
    • マシンタイプ: f1-micro(無料枠)
    • OS: Ubuntu 16.04(crond があればなんでもいい)
  • 起動停止対象インスタンス
    • 何でも良い

実装

スケジューラ用インスタンス作成

とりあえずUbuntuにした
crondとgcloudコマンドが使えればなんでもいい
gcloud コマンドはデフォで入っている

IAM 設定

gcloud コマンド実行用のサービスアカウントを作る
クソザコなのですべてGUIでポチポチやりました

役割作成

起動停止に必要な権限を持つ役割をつくる
ここで与える権限は今回の環境をもとに検証した最低限のものです

  1. [IAMと管理] > [役割] から役割を新規作成
    • 名前: 起動停止制御(なんでもいい)
    • 説明: なんでもいい
    • 権限の追加:
      • compute.instances.get
      • compute.instances.start
      • compute.instances.stop
      • compute.zoneOperations.get

サービスアカウント作成

gcloud コマンドを実行するサービスアカウントをつくり、役割を割り当てる

  1. [IAMと管理] > [サービスアカウント] からサービスアカウントを新規作成
    • サービスアカウント名: cron01(適当)
    • サービスアカウントID: cron01@<projectID>.iam.gserviceaccount.com(勝手に入る)
    • 役割: 起動停止制御(上でつくったもの)
    • 新しい秘密鍵を提供
  2. 作成後、秘密鍵[<projectName>-xxxxxxxxxxxx.json]がダウンロードされる

gcloud 環境設定

作ったサービスアカウントをgcloud実行環境で認証する必要がある

  1. 上でダウンロードした秘密鍵[<projectName>-xxxxxxxxxxxx.json]をスケジューラ用インスタンス上にアップロードする(どうやってでもいい)
  2. スケジューラ用インスタンスのOSにcron実行ユーザでログインする
  3. 以下のコマンドを実行して作成したサービスアカウントを認証させる
    gcloud auth activate-service-account --key-file "\<projectName>-xxxxxxxxxxxx.json"
  4. 以下のコマンドを実行して作ったサービスアカウントがACTIVEになってることを確認する
    gcloud auth list

cron 設定

起動停止用のgcloudコマンドをcronに登録してスケジュール実行させる

スクリプト作成

gcloudのコマンドだけ書いた最低限のもの
cron実行ユーザに実行権限を与える
エラー制御やログ出力などしたければ適宜加えてください

instance_start
gcloud --account=<作ったサービスアカウントID> compute instances start <起動停止対象インスタンス名> --project <対象プロジェクトID> --zone <対象ゾーン名>
instance_stop
gcloud --account=<作ったサービスアカウントID compute instances stop <起動停止対象インスタンス名> --project <対象プロジェクトID> --zone <対象ゾーン名>

cron登録

とりあえず0時起動12時停止で登録する

crontab -e  # cron実行ユーザで打つ
crontab
0 0 * * * /<path>/instance_start
0 12 * * * /<path>/instance_stop

確認

/var/log/syslog

スケジューラ用インスタンス上でcronの実行ログを見る

cat /var/log/syslog | grep <起動スクリプト名>
cat /var/log/syslog | grep <停止スクリプト名>

gcpのログ

クソザコなのでGUIからみる

  1. [Logging] > [ログ]
    • 検索フィルタ:
      • GCE VM インスタンス, <起動停止対象インスタンス>
      • compute.instances.start
      • compute.instances.stop

以上、よろしくお願いいいたします


参照

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした