GCE を自動で停止させたい。
- GCEの自動起動・自動停止をスケジューリングする - Qiita
- Cloud Scheduler を使用した Compute インスタンスのスケジュール設定 | Cloud Scheduler のドキュメント | Google Cloud
を見つつ。リリースから十分に経過しているし、公式の通り Cloud Functions
を使えば良いはず。
課金対象とは書いてはあるが、Google Cloud の無料プログラムの「Always Free の使用上限」で見る限り、
- Pub/Sub
- Cloud Functions
については十分に範囲内だと思う。
Cloud Scheduler
についても料金 | Cloud Scheduler | Google Cloudを見ると 3 ジョブまでは無料でいけるようなので、これも気にしなくて良さそう。課金されても 1 ヶ月あたり 11 円くらいのようだ。
Cloud Scheduler を使用した Compute インスタンスのスケジュール設定 | Cloud Scheduler のドキュメント | Google Cloudを参考にする・・・したい・・・が、罠がある。
8. [ランタイム] で [Node.js 6] を選択します。
とあるが、ランタイムのバージョンもソースコードも古くて、この内容だとすぐにサポートを切られてしまう。よって、ページの言語を英語にしてScheduling compute instances with Cloud Scheduler | Cloud Scheduler Documentation | Google Cloudこっちの
8. For Runtime, select Node.js 8.
の手順に従う必要がある。
AWSとGCPを運用してみてわかったこと | CyberAgent Developers Blogなども読むと参考になった。
ここまでで、とりあえず Compute Engine を起動して VPC の設定で接続元の IP 制限をかけて、Cloud Scheduler + Cloud Functions で Compute Engine の停止忘れ対策の定時シャットダウンを実行できるようになった。
*****
2022/2/8 時点で以下で動作する。
- Runtime: Node.js 10
- index.js
- package.json
もちろん既に Node.js 10 はサポート終了しているのだが、scheduleinstance と Node.js 12 の組み合わせで正常に動作しないのだ。具体的には、index.js#L90 で instances.items
として undefined
が返ってくるように見える。よく分からないので、とりあえず動くバージョンを用いている。