indexgo
login

GCEのプリエンプティブインスタンスをほぼ常時起動(永続化)する

通常価格の半額以下で借りられるGCEのプリエンプティブインスタンス。勝手にシャットダウン&最大24時間起動がネックですが、なんとか常時起動(永続化)して使えないものかと試してみました。

作成者:Ssさん 公開日:2018年9月18日 10時22分 更新日:2018年9月18日 10時23分

国内VPSばりに安い、GCEのプリエンプティブインスタンス

プリエンプティブインスタンスのメリットはなんといっても価格。

GCEのクラウドならではの、スケーリングのしやすさ、管理のしやすさを、VPS並みの料金で実現できるのは、大きなメリットです。

<料金表(アイオワの場合)>

インスタンスタイプ CPU メモリ 通常月額 プリエンプティブ月額
--------------------------------------------
f1-micro 	1 	0.60GB 	$3.88 	$2.56
g1-small 	1 	1.70GB 	$13.13 	$5.11

n1-standard-1 	1 	3.75GB 	$24.2725 $7.30
n1-standard-2 	2 	7.5GB 	$48.5500 $14.60
n1-standard-4 	4 	15GB 	$97.0900 $29.20

f1-microだと割安感がないですが、それ以外のインスタンスだと半額以下です。

4CPU/15GBメモリで30ドルってのはかなり安い部類に入ります。

CPUとメモリを自由にカスタムすることも可能です。

ただし、プリエンプティブインスタンスは最大24時間しか起動しない・勝手にシャットダウンする

プリエンプティブインスタンスはいいことばかりではなくて、GCEの空きリソースを使う代わりに安くなる仕組みなので、GCEの都合で勝手にシャットダウンされるし、最大でも24時間しか起動できません。

でも、バッチサーバーなど、24時間365日常時起動しなくても、1日数回・数分のシャットダウンが許容されるのであれば、かなり使えるサーバーと言えます。

リモートで起動リクエストを送ればいいんじゃない?

勝手に落ちるなら、落ちる度に自動起動させればほぼ永続化できるってこと。ただし、プリエンプティブインスタンスは自動再起動の設定ができないので、なんとかしてリモートで起動させる必要があります。

今回は、管理用マシン(自宅サーバー)からgcloudコマンドでインスタンスの起動処理を毎分行うことにしました。

ちなみに自宅サーバーはIntel Compute StickにUbuntuを入れたサーバーで、電気代は常時電源ONで月に数十円です。

毎分処理はcronで行います。

まずは、gcloudからインスタンスの起動をする設定

やり方は下記のページのままなので割愛します。

(1) 役割の作成
(2) IAMの作成
(3) 管理マシンへの秘密鍵のインポート
(4) 管理マシンで認証

までやればOKです。

Good SoSo
GCPクソザコが2日考えた末実現できた実装 ## 前提 / 要件 * 遊び * 動けばいい * 金なし * インスタンス起動時間を指定時間帯だけに絞りたい * 無料で実装したい * 暇なし * 手運用...

gcloudコマンドをcronに登録

次にcronにgcloudの起動コマンドを登録します。

gcloudはショートカットなので、「which gcloud」でフルパスを探しておいて、cron側にはフルパスを記述します。

下記は、毎分起動コマンドを実行する設定です。

# GCEインスタンスの自動起動
* * * * * /usr/bin/gcloud --account=<作成した> compute instances start <インスタンス名> --project <プロジェクト名> --zone <ゾーン名>

GCEのプリエンプティブインスタンスを、ほぼ常時起動(永続化)できました。

数百〜数千円くらいのサーバーなら、さくらVPSとかConohaとかでもいいんですが、将来的にスケーリングが必要そうなバッチサーバーなどは、メモリやCPU数をカスタマイズできるGCEの方が使いやすい気がします。

普通にWEBサーバーとして使うには厳しいかもですが、いろいろアイデア次第で使い勝手の良いサーバーになってくれそうです。