はじめに
Cloud FunctionsとCloud Runはどのように使い分けたらいいのか?
そもそもサーバレスはどのような状況で使用するべきなのか。
本記事ではGCPにおける各サーバーレスサービスの違いについて、これらの疑問を解決できるようまとめました。
記事内でははCloud Functions, Cloud Run, App Engineの3つを比較しています。
サーバレスコンピューティングについて
サーバーレスコンピューティングは、従量制のバックエンドサービスを提供する方法です。ユーザーはインフラなどを意識することなく、コードを書き込んだりデプロイしたりすることができます。
メリット
- インフラの管理が不要
- 自動拡張(Scalability)
- 料金管理の最適化
サーバレスのメリットは大きく上の3つだと私は考えています。
これらのメリットのおかげで開発者はコードを書くことに集中できるので、スタートアップやベンチャー企業を中心に広く使われているみたいで、メルカリの技術ブログなどでも時たま取り上げられています。
ユースケース
- ステートレスなHTTPアプリケーション
- Web、モバイルのバックエンド
- リアルタイム、イベントドリブンなデータ処理
- 機能のプロトタイプ
注意:サーバを持たないのでデータ等の保存は外部にサーバを立てるなどする必要があります。
GCPのサーバレス
GCPでは、Cloud Functions, Cloud Run, App Engineの三種類のサーバレスアーキテクチャがあります。
Cloud FunctionとCloud Runについて以下の表にまとめました。
Cloud Functions | Cloud RUn | |
---|---|---|
トリガー | HTTP or Event | HTTP |
実装方法 | 関数 | Container or GKE |
language | JS/Node.js, Python, Go | 言語、ライブラリに依存せずなんでも使える |
大きな違いは実装方法がFunctionsの方は関数で実装しなければならないので使用できる場面が限定的であるのに対し、Cloud Runではコンテナーベースの実装となっているため、ライブラリや言語に依存せずに柔軟に使用することができます。また、Cloud RunはGoogle Kubernates Engine(GKE)にもデプロイすることができ、これにより、ステートフルなサーバレス環境を構築することができるのも大きな特徴の一つです。
よって自分がよくする各サーバレスサービスの使い分けとしては、
Functionsの要件内で事足りる比較的軽めの処理、もしくはリアルタイムイベント駆動を実装する必要がある場合にはCloud Functionsを用います。
すでにDockerコンテナでパッケージ化しているもの、もしくはステートフルなサーバレスアーキテクチャが必要な時はCloud Runを用います。
そしてApp EngineはWebアプリ全体をデプロイしたい場合に使用します。
また、使用感としては、App Engineが最も費用が高く、Cloud Functionsが最も低いです。
また、Cloud Functionに関して、Azure FunctionsやAWS Lambdaと比較すると、使用可能な言語が極端に限られていたり、ランタイムの制限が短かったりと若干使いづらいです。
AWS Lambdaがランタイム制限も1番長く、使用可能な言語も豊富でC#なども使えます。
そして、Cloud FunctionsがNodeやPythonなどの処理の遅い言語で描かれることが多いことから、、軽く速度が求められていない処理はCloud Functionsで行い、重い処理を伴うものはCloud RunやApp Engineことがベストプラクティスです。