らんだむな記憶

blogというものを体験してみようか!的なー

GCPオベンキョ(5) — GCE の自動停止

GCE を自動で停止させたい。

を見つつ。リリースから十分に経過しているし、公式の通り 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 時点で以下で動作する。

もちろん既に Node.js 10 はサポート終了しているのだが、scheduleinstance と Node.js 12 の組み合わせで正常に動作しないのだ。具体的には、index.js#L90instances.items として undefined が返ってくるように見える。よく分からないので、とりあえず動くバージョンを用いている。