はじめに
GoogleCloudの環境で、踏み台のためにスペック小さく作っていたのですが、ちょっとコストが気になってきました。
平日にのみ必要なものなので、休日は止めておき平日必要になる前に起動すればよいものです。
もちろんこれを手動でやるのは嫌なので、コストをかけずに自動化しようと思います。
結論
- インスタンススケジュールを利用する。
- 起動・停止を同曜日にしないためにはcronでタイミング指定する
詳細
インスタンススケジュール
まさに今回やりたいことにそのまま合致する機能です。
インスタンス スケジュールを使用するには、起動と停止の動作の詳細を指定したリソース ポリシーを作成し、ポリシーを 1 つ以上の VM インスタンスに接続します。
この機能が出る前であれば、Cloud Schedulerなど別サービスと組み合わせたり、このVMを起動・停止するための別のサービスが必要でしたが、インスタンススケジュールがあればここだけで完結します。
設定
今回は、①土曜日にVM停止②月曜8:00に起動(いずれも日本時間)で設定していきます。
事前準備
対象となるVMは事前に用意しておいてください。VM自体に特別な設定は不要です
手順(画面から実施します)
-
あらかじめ必要な権限を設定しておきます。
権限を付与するサービスアカウントは、デフォルトで用意されたservice-${プロジェクト番号}@compute-system.iam.gserviceaccount.com
です。
権限としては、VMの起動、停止が出来る必要があります。最小限であればそのためのカスタムロールを作っても良いかもしれませんが、ここでは公式ドキュメント記載の通り「 Compute インスタンス管理者(v1)(roles/compute.instanceAdmin.v1)」を付与しておきます。 -
VMインスタンスの画面にて「インスタンス スケジュール」タブがあります。
ここから[インスタンス スケジュールの作成]に進みます。
繰り返しについては、日、週、月を選ぶことができ、週の場合は曜日を、月の場合は日付を選択します。
基本の設定方法は、時刻と頻度(毎日 or 曜日指定)です。
この場合、指定された曜日で起動と停止をすることになります。
今回のように①土曜日に停止②月曜日に起動にしたい場合は、特定の曜日に起動&停止のセットをやりたいわけではないので、「CRON式を使用」をONにして設定します
必要な設定が出来たら[送信]します。
4. インスタンス スケジュールを既存の VM インスタンスに接続する
画面から作成したインスタンススケジュールを選択し、紐づけるインスタンスを選びます。
権限付与が出来ていないと以下のようなエラーが出力されるので、権限設定を確認しましょう。
エラーなく作成出来たら完了です
動作確認
土曜日の停止、月曜日の起動を待っての確認です。
ログを見ると、土曜00:12頃に停止し、月曜08:12頃に起動したことが見て取れます。
(最大15分のラグがあるとのことです。)
これで期待通り、任意のタイミングでのVM自動停止、自動起動が出来るようになりました。
注意事項
各 VM インスタンスに接続できるのは 1 つのインスタンス スケジュールのみ
複数ポリシーの適用はサポートされていません。
複雑な起動・停止ルールを組むとしたらこの機能ではなく、Cloud Scheduler + Cloudd Functionsなどを検討すると良いでしょう。