概要
去年GCPを利用していて、最終的にCloud Runに行き着いた理由を示します。ここで挙げるGCPのサービスは以下の通りです。
- GAE(Google App Engine)
- GCE(Google Compute Engine)
- Cloud Functions
- Cloud Run
前提条件は以下の通り。
- アプリケーションとして管理
- 料金は安く
- サーバレス
- Pythonを使用
ここでの観点は「実装のしやすさ」「料金の安さ」「管理のしやすさ」です。ここでの管理のしやすさとは、「アプリケーションとしての管理のしやすさ」としています。結論から述べると、この観点においてCloud Runが良いのかなと思っています。Beta版であることを気にしないのであれば、これで十分だと思います(2020年1月7日現在)。
また、GKEをここで出してないのは私がコンテナ技術に疎いのと、先にCloud Runを触ったからです(ちなみにCloud Runもコンテナサービスです。私は一応以前に勉強していたので、そこそこ振り返って実装できました。ただ、初学者でも基本的にはマニュアルやブログを参考にすればそこまで実装が難しくありません)。
比較
先に比較表を載せます。完全個人的な印象です。
サービス名 | GAE | GCE | Cloud Function | Cloud Run |
---|---|---|---|---|
実装しやすさ | △ | × | 〇 | △ |
料金の安さ | × | × | 〇 | 〇 |
管理のしやすさ | 〇 | × | △ | 〇 |
実装のしやすさ
ここでは、「必須知識量の多さ」で比較しています。この場合、Cloud Function以外はソースコード以外に設定ファイル等が必要になります。GAEはインスタンスの発行条件、GCEはそもそもレンタルサーバ、Cloud Runはコンテナサービスなので、ソースコードのみのCloud Functionsと比べるとやや必要知識が多くなりがちです。
料金の安さ
そのままGCPの料金表を見た感じです。
GAEおよびGCEは動作時間で課金されます。GAEは発行されるインスタンス数および時間で課金されるため、設定を間違えるとパケ死のような状態になります。
Cloud FunctionsおよびCloud Runはアクセス数で課金されます。ここで、厳密にいえばCloud RunもCPUなどの使用時間で課金されますが、GAEよりも安いという記事がいくつか出ています。
管理のしやすさ
これは簡単に言うと、管理時のフォルダ構成の明瞭さや設定ファイルの少なさです。Cloud Functionsは「関数一つにつき一ファイル」必要になるため、共通的に使用する自作ライブラリがあるとファイル構造が複雑化し始めます。GAEおよびCloud Runでは少なく済ませようと思えばファイルは2~3つ程度になる上、一般的なワークスペースの構造を保ちやすいです。GCEはレンタルサーバなので、こういう意味では論外ですかね。
こうしてみるとCloud FunctionsとCloud Runだとあんまり違いがないように見えますが、私の場合はコンテナについての知識が少しだけあったので、実装しやすさがあまりデメリットにならないため、Cloud Runの方を採用しています。ですが、少しマニュアルにexampleがあるので、Cloud Runで「△」にしているのも僅差のような裁定だと考えています。Cloud Functionsの真価はどちらかというと「GCPのサービスにイベント処理を追加する」という意味な気がするので、この記事で言うところの「アプリケーションとして」という観点では分が悪いように思います。
おわりに
ここで、以上のような比較をしていますが、結局のところどういう風に利用したいかによって選択すると良いと思っています。今回「サーバレス」という設定が選定の幅を狭めています。今までのオンプレをクラウド化などの用途であれば素直にGCEを使うと良かったりします。