App EngineとCloud RunってどちらもGCPのサーバーレスサービスだけど、何が違うのかよくわかっていなかったので調べてみた。
技術的な違い
GCPが管理してくれる範囲、マネージドな範囲が違う。
- App Engine: PaaS
- Cloud Run: CaaS(Container as a Service)寄り
下の図でグレー四角で囲われた部分が各サービスでユーザーがカスタマイズする部分。
言い換えるとそれ以外はGCPにマネージドされている部分。
つまり、App Engineのほうが寄り多くの部分がマネージドされている。
Cloud Runを「CaaS寄り」としているのは、CaaSはコンテナ管理機能までを提供しているサービスのことで、GCPではKubernetes Engineがこれに該当し、Cloud Runは厳密にはCaaSではないから。
Cloud RunはKubernetes EngineとApp Engineの中間(どちらかというとKubernetes Engine寄り?)で、コンテナを作成、指定すれば勝手にアプリケーションがデプロイされるサービス。
この違いによりApp EngineではGCPが用意しているランタイム環境(python Node javaなど)のみに限られるが、Cloud Runでは任意にランタイム環境でコンテナを作ってデプロイすることができる。
料金的な違い
###App Engine
インスタンスの従量課金制。時間あたりの料金インスタンスクラスのごとに異なる。
最後のリクエストが終了してから15分後にインスタンスは終了する。
参照
###Cloud Run
リソースごとの従量課金制。つまりCPU、メモリなどのリソースごとに課金される。
100ms単位で切り上げられたリソースの使用時間が課金対象。
参照
App Engineのインスタンスが最終リクエスト終了から15分後に終了するのに対し、Cloud Runは100ms単位の課金なので、常時アクセスがあるわけではないアプリケーションならば、Cloud Runのほうが良さそう?🤔
余談
App EngineもCloud Runのどちらもサーバーレスなサービスに分類される。
サーバーレスに明確な定義はない(と思っている)が、一般に以下のようなサービスのことを言う。
- サーバーの管理が不要
- 自動スケーリング
- 従量課金制
本当にサーバーが無いのではなく、アプリケーションが動いている物理的なサーバーは存在する。
ただ、サービスを使うユーザーからはサーバーが抽象化され、サーバーの状態を気にしなくて良く、管理が不要(レス)なサービスのこと。