Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

Cloud Scheduler + Cloud Pub/Sub + Cloud Functions でGCEのインスタンスの自動起動or停止させてみた

経緯

これまでGAEのcronでGCEのインスタンスの自動起動、停止させてたけど、Cloud Scheduler出たからそちらで自動起動、停止の管理できないかと思ってやってみた。

システム構成

すごい単純

system.png

構築手順

1. Pub/SubのTopic作成

GCPのコンソールからPub/Subの画面を開いて、switcherという名のtopicを作成します。

pubsub.png

2. Cloud Functionsの作成

uu4k/compute-instances-switcher

インスタンスの起動、停止を行うFunctionの作成を行います。

今回はCloud Shellからのデプロイを行います。

  1. コンソールからCloud Shellを起動
  2. githubからリポジトリをcloneしてきてデプロイ
deploy.sh
git clone https://github.com/uu4k/compute-instances-switcher
cd compute-instances-switcher
./deploy.sh
# APIが有効になってないと有効にするか効かれるのでyを入力
# 2分くらい経てばデプロイ完了

cloudshell.png

compute-instances-switcherの解説

compute-instances-switcherはPub/Subからインスタンスの起動or停止の情報と対象インスタンスの名前(ワイルドカード可)をjsonで受け取り、インスタンスの起動or停止を行います。

pubsub.json
{"switch": "off", "target": "dev-*"}

今回のものはインスタンス名しか指定できませんが、インスタンス一覧の取得APIのフィルターパラメータをカスタマイズすればlabelなど他の情報での対象指定もできるので、このあたりは必要に応じて変えてみてください。

3. Cloud Schedulerの設定

  1. コンソールからCloud Schedulerの画面を開いてCREATE JOBのリンクをクリック
  2. 初回だとリージョン選択してと言われるので日本リージョン選択
  3. JOBの詳細を入力する(下記参照)
  • Name: switch-on(自由)
  • Description: (自由)
  • Frequency: (起動させたいタイミングをCRONのフォーマットで指定)
    • 平日9時の場合は 0 9 * * 1-5
  • Target: Pub/Sub
  • Topic: switcher
  • Payload: {"switch": "on", "target": "dev-*"}
    • switchがonなら起動、offなら停止のためのジョブになる
    • targetはインスタンス名を指定(ワイルドカード可)

scheduler-region.png
scheduler.png

4. 動作確認

Cloud Schedulerの画面から手動実行ができるので、手動実行して対象インスタンスがちゃんと起動or停止するか確認できます。

scheduler3.png

うまくいかない場合は、Cloud Functionsの画面からエラーの発生有無やエラーログの確認ができるので、そちらで原因を調査してみましょう。

あとがき

pythonのAPI Clientの使い方につまった以外は割と簡単にできた。今回の件以外でも簡単な定期実行ジョブにも使えそう。

ただ、Cloud Schedulerの設定変更ができない(毎回削除・作成)のでそのあたりが面倒くさい。

あと、はじめFunctionsを実行するServiceAccoutにcompute.startとかの権限与えないといけないのかなと思ってたけど今回は必要なかった。やりたいことによっては権限エラー出るかもしれないのでそのあたりは確認が必要そう。

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
18
Help us understand the problem. What are the problem?