【OCI/GCP/AWS】メモリ1GBの無料インスタンス生活にはスワップメモリが必要

メモリ1GB無料インスタンスは太っ腹……だけど1GBでも足りない😭

 クラウドの無料インスタンスを利用している方の用途は、だいたいWordPressなどを用いた個人サイトかと思います。最近はメモリ1GBの無料VMが各社から提供されるようになり、個人サイトの運営はだいぶ楽になりました。私も、無料でこそありませんがAWS LightSailのメモリ512MBでさんざん苦労したWordPressを1GBに増やしたら安定した経験があります。

 しかし、少し欲張ったとたんにメモリ1GBでも足りなくなってしまいます。自宅にもLinuxサーバーを置いている方は、だいたいこんな感じで

メモリ32GB以上、プロセッサ8vCPUくらいはあるので、重いサーバーソフトを入れても「いきなり全く動かない」事態に直面することは無いと思います。しかしこの感覚でメモリ1GBの無料インスタンスを使うと大変なことになります……。

Logstash(ETLツール)がフリーズしまくる

 2年ほど前からツイートデータなどの蓄積・抽出にElastic Stackを使っています。全文検索エンジンのElasticsearch、データ前処理(ETL)ツールのLogstash、BIツールのKibanaが3点セットで構成されています。

 今回、このうちLogstashだけOCIの無料枠VMインスタンスに設置を試みました。というのも、自宅の回線が低速・不安定なため各種情報サービスからAPI経由で安定してデータを取得するのが難しいからです。

回線が安定したパブリッククラウドで『クラウドETL』

エンタープライズ系ツールの鬼門『JavaVM』

 ところが、データベース周りなどエンタープライズ系のツールは、複数のOSやプラットフォームで互換性を確保するため、たいていJava VM上で構成されています。まずJava VMを起動して、その上で各種アプリを起動する仕組みです。しかしこれがデカい……。

 メモリ1GBのインスタンスにLogstashをインストールして起動したところ、またたく間にメモリがすべて食いつくされてしまいました😨

こうなるともう大変。sshでのログインすら出来なくなり、モニターを見ると再起動をかけるたびにOSがフリーズしているのです😭

サーバー向けUbuntuにはスワップが初期設定されていない

 私はメモリー極小のレンタルサーバー時代からLinuxを使っていたので、てっきりクラウドのインスタンスにもスワップメモリ(メモリが足りなくなったときに、一時的にデータをディスクに退避させてメモリ不足を防ぐ仕組み)が設定されていると思い込んでいました。

 ところが、サーバー向けUbuntu Linuxのイメージは初期設定ではスワップが設定されていないのです。従って、メモリ使用量が1GBに達するとそのままOSがフリーズしてしまうことになります。

 私は泣きながら再起動して速攻でsshしてLogstashをいったん止めた上で、スワップの設定を行い、なんとかLogstashの動作を安定させることが出来ました。

スワップの設定後。2GBのスワップ領域が確保されデータの一部が退避されている

サーバーでスワップは設定するべきか?

 なぜ、Ubuntuサーバーでは初期設定でスワップが無いのでしょうか。理由はふたつ考えられます。

 第一の理由は、『速度重視』です。Webサーバーなど多数のアクセスをさばかなければならないサーバーは、常に高負荷の状態にあります。データを頻繁にディスクに退避させると、メモリとの速度差のぶんだけサーバーの処理速度が落ちてしまいます。特に業務用途では避けたいところです。

 第二の理由は、『ディスクの消耗』です。一般的にディスクはメモリーと比べて寿命が短く、頻繁にアクセスすると故障につながる恐れがあります。サービスダウンが許されない業務用途では、これも避けたいところです。

 しかし、個人用途のサーバーはめったに高負荷になりませんし、遅くても我慢すればどうにかなります。しかも、遅いと言ってもハードディスクの時代とは違い、今ではSSDなので大して遅くありません。さらに言ってしまえば、ディスクが消耗しても困るのはクラウドサービス側だけです……💦

 というわけで、

個人用途のクラウドインスタンスには遠慮なくスワップを設定しよう

というのが私の結論です。

GCPの無料クラウドVMが性能アップするらしい(F1-Micro → E2-Micro)

突然GCPからメールが届いた

 突然GCP(Google Cloud Platform)からメールが届きました。Googleからなので「またセキュリティ警告かよ」とびっくりして開いたところ、なんと「無料枠のVM(仮想サーバー)が2021年8月1日からグレードアップするからお引越ししてね」という嬉しい内容。

 GoogleにはColab Proで月1,072円課金していますが、正直GCPには課金する魅力を感じていませんでした。今回無償のままグレードアップということで、新VMのインスタンス仕様を調べてみました。

新無料VM『E2-Micro』はメモリ1GBで「まあまあ」

 GCPの料金ページを見ると、

  • 2 つの vCPU の 12.5%
  • メモリ1GB
  • ディスクの記載なし

というわけで、メモリが1GBでOCIに並んだほかはイマイチよく分かりません。vCPUに関しては、おそらく「ご近所が空いている時は2vCPU使ってくれるが、使いすぎたり混んでいる時にはリソースを減らされる」ということだろうと思います。常時フル稼働する用途でなければ、実質的には2vCPUと考えて良さそうです。

ディスクは別枠で最大30GBのストレージをアタッチするらしい

 ディスクに関する記載がなく相変わらず初心者に不親切だなと困っていたところ、Qiitaで「標準永続ディスク ストレージは30 GB まで無料枠内」との記載をみつけました。

 どうやら、何も考えずに無料枠でVMを立ち上げると10GBのSSDが30GBの枠から割り当てられ、明示的に割り当てを30GBに変更することで30GBがフルで割り当てられるようです。「VMとは別枠だからVM側のスペックには記載がない」ということなのでしょう。

持っておいて損はなさげ

 これまでのGCPの無料枠は「お情け」「お試し」というイメージがありましたが、OCIに近いスペックになったことで「真面目に使ってみてもいいかな」という印象に変わりました。特にAWS LightSailの最安プランよりはハイスペックなので、なんとなくLightSailを使っている人は引っ越した方がシアワセになれそうです。

 おそらく、VMとストレージを別枠で確保したクラウド構造になっていることで、E2-Microへの引越しもウィザード的に簡単に出来るはずです(ですよねGoogle先生💦)。

【追記】E2-Microに移行しました

 Google先生から告知があった新無料VM開始日の8/1から、時差を考慮して1日遅れの8/2にE2-Microへ移行しました。

 基本的に作業はマウスポチポチだけですが、さすがにVMをいったん止めないとインスタンスのグレード変更は出来ませんでした。インスタンスの停止後『編集』をクリックし、『マシンの構成』から『汎用』『E2シリーズ』『マシンタイプ:e2-micro(2 vCPU、1GBメモリ)』を選び、保存。インスタンスを再起動します。

インスタンスの停止後『編集』をクリックし、『マシンの構成』から『汎用』『E2シリーズ』『マシンタイプ:e2-micro(2 vCPU、1GBメモリ)』を選び、保存。インスタンスを再起動

無事移行。ただし無料かどうかは次の請求まで不明……

 インスタンスの変更後、 e2-microのメモリが1GBになっていることを無事確認しました。apacheとPostgreSQLが動いている状態で600MB以上メモリが余っているのは嬉しいですね。

 しかし、GCPはOCIなどと違って管理画面に『無償です』といった表示は特に出ないので、次回の請求まで無料枠が適用されているかどうかは分かりません。ドキドキですね()