データサイエンス

Google Compute EngineのVMインスタンスで、自らの起動と停止もするcronのようなことをしたい

レンタルサーバでcronを設定するみたいなことをやりたいとき、マシンの起動と停止をこまめにやったら安くなるのにと思ったことはないでしょうか。これはGCPでは、自動で出来ます。VMインスタンスを自動起動し、処理のキックはスタートアップスクリプトに書いておき、最後処理が終わったら自らにshutdownを発行すればよいという流れです。任務を終えたら帰っていく、ウルトラマンみたいなもんかと思われます。

1. VMインスタンスを作成する

VMインスタンスは以下のような設定が、最安だと思います。プリエンプティブルVMには今回しませんでした。AWSは確か、CentOSとRHELが同じ料金だったと記憶しており、ごっちゃにして私は無駄にお金を払ってしまいました。。

マシンタイプ
e2-micro(vCPU x 2、メモリ 1 GB)

ゾーン
us-central1-a (東京より安い)

イメージ
centos-7 (RHELなどは料金が発生する)

タイプ
標準の永続ディスク

サイズ
20GB

2. VMインスタンスを定期的に起動する

Cloud FunctionsとPub/Subの機能で実装しました。これ通りに実装します。今回、停止に関する記述は無視で大丈夫です。

Cloud Scheduler を使用した Compute インスタンスのスケジュール設定

調べてみたら、インスタンス スケジュールという標準の機能があるんですね。こちらでもいけそうです。未確認です。

VM インスタンスの起動と停止をスケジュールする  |  Compute Engine ドキュメント  |  Google Cloud

3. VMインスタンスの起動スクリプト設定する

Compute Engineの各VMインスタンスの設定の中に、起動スクリプトを書く場所があるのでそこに書きます。つまり、/etc/init.dとかをいじる必要がないんですね。

起動スクリプトの実行  |  Compute Engine ドキュメント  |  Google Cloud

例:

#! /bin/bash
sleep 60
bash xxxxxxxx.sh
sleep 60
shutdown -h now

APIたたいて、BigQueryにLoadするだけとかなら、Cloud Functionsでいいと思います。クローリングをしたいとなると、540秒以内に終わらないのでこんな方法も良いのかと思います。