「Cloud Functionsってどういうサービスなの?」
「Cloud Functionsを活用することのメリットを知りたい」
クラウドコンピューティングの流行により、システム管理者はハードウェアの運用に頭を悩ませることがなくなりつつあります。Google Cloudが提供するCloud Functionsは更にクラウド上のサーバーすら意識せずにプログラムを実行できるサーバーレスのサービスです。
本記事ではCloud Functionsについてサービスの概要をユースケースをご紹介します。
Cloud Functionsとは
Cloud FunctionsはGoogle Cloudが提供するサーバーレスのクラウドコンピューティングサービスです。
類似のサービスとして例えばAWSのLambdaも有名ですね。
サーバーレスのCloud FunctionsはFaaS(Function as a Service)とも呼ばれます。
サーバーレスとは、物理サーバーが存在しないという意味ではなく、実際にはGoogleが管理しているサーバーを使用しているのですが、我々ユーザー側では全くサーバーの運用やスペックを気にせずに、アプリケーションを実行できる、という意味になります。
またアプリケーションの実行にもイベント駆動といって、HTTPトリガー、Cloud Storageトリガーなど、システム上で発生したイベントを起点に実行することが可能です。
Cloud Functionsの特徴をまとめると
・サーバーの管理が不要
・イベント駆動
・従量課金制
の3点を覚えておくと良いでしょう。
HTTPトリガーとイベントトリガー
Cloud Functionsのイベント駆動には、大別するとHTTPトリガーとイベントトリガーが存在します。
HTTPトリガーは、HTTP(S)リクエストに応じて関数を実行できます。
関数にHTTPトリガーを指定するとリクエスを受信できるURLが割り当てられ、GET、POST、PUTなどの各リクエストメソッドをサポートします。
イベントトリガーにはPub/Subトリガー、Cloud Storageトリガー、汎用のEventtarcトリガーが存在します。
Pub/SubとはGoogle Cloudが提供するメッセージングサービスで、Pub/Subをサポートする他のGoogleサービス、例えばCloud Schedulerなどと組み合わせて、
Cloud Shceduler(スケジュールイベント発生!) → Pub/Sub → Cloud Functions
このようなフローでイベント駆動を行うことが可能です。
Cloud Scheduler以外だと、Cloud LoggingやGmailもサポートしており、
特定のログの発生時や、特定のメール受信時に関数をイベント駆動させることができます。
Cloud Functionsのユースケース
では実際にCloud Functionsはどのような場合に使うのが良いのでしょうか?
特にGoogle Cloudでは他にもApp EngineやCompute Engineなどのクラウドコンピューティングサービスを提供しているため、迷うことがあるかもしれません。
Cloud Functionsが向いているのは、小規模アプリケーションやAPI、小規模データのETL処理・バッチ処理、イベント駆動型の処理です。
Cloud Functionsに最大処理時間の制限があること(この点は第2世代の登場により大幅に緩和されましたが…)や、基本的にGoogle Cloudのフルマネージド型のサービスは料金が高めに設定されていることを考えても、CPU消費や処理時間が大きいアプリケーション、またはステートフルなアプリケーションは、Compute Engineなど別のサービスを検討するべきです。
Cloud Functionsに最適な例としては、
・Cloud Storageにデータファイルが置かれたことを検知して、そのデータを取得・加工してBigQueryにインサートするデータ加工処理
・サードパーティのサービスやAPIを呼び出す処理(Slackの通知Botなど)
などが挙げられます。
【Cloud Functions】第1世代と第2世代
Cloud Functionsには第1世代と第2世代の2種類のバージョンが存在します。
第2世代はCloud RunとEvenarcをベースにした新しいバージョンで機能が強化されています。
そのためこれから新規に作成する関数では基本的に第2世代を選択することを推奨します。
第2世代では例えば以下のような点が強化されています。
・より長いリクエストの処理時間
→第1世代では最大9分だったのが、第2世代ではHTTPトリガーの場合最大60分まで可能になりました。
この変更により、データストリーム処理など時間のかかる処理でもCloud Functionsで…という選択肢が増えたと言えます。
・より大きなインスタンスサイズ
→最大8GBのRAM(2vCPU)から最大16GiBのRAM(4vCPU)へ変更されました。
・Eventarcの統合
→EventarcとはGoogle Cloudが提供する、外部のイベントソースで発生したイベントをPub/Sub経由で様々な宛先に転送するサービスです。このEventarcトリガーがサポートされたことで、イベント駆動の対象となるサービスが増えました。
Cloud Functionsの実行環境
Cloud Functionsでは下記の言語のランタイムをサポートしています。
Node.js
Python
Go
Java
Ruby
PHP
.NET Core
Cloud Functionsは自動スケーリング機能を備えており、トラフィックが増えると新しいインスタンスを作成して対応します。インスタンス数は最大インスタンス数を設定することで制御が可能です。
ただし自動スケーリングを有効にするには、関数がステートレスである必要があります。
ステートレスとは前回の関数呼び出しの際のデータを保持せず、前回の処理に依存せずに行う処理を指します。
もし関数呼び出し間で状態を共有する必要がある場合は、CloudStorageやMemorystoreなどの別のサービスを使用してデータを保持します。
同時実行について、第2世代では1つのインスタンスで複数のリクエストを処理できます。すでにウォーム状態のインスタンスが複数のリクエストを同時処理するため、全体のレイテンシを短縮します。
第1世代ではインスタンスは1つのリクエストを処理するため、同時リクエストしても異なるインスタンスにより処理され、変数やメモリが共有されません。
まとめ
Cloud Functionsは、FaaS型のサーバーレスなサービスで、とにかくインフラを気にすることなくすぐにコードをデプロイしたいという時や、イベント駆動型のバッチ処理を実装したいといった場合に、驚くほど早く実現できる点が魅力的なサービスです。
システム運用者の方には小規模なアプリケーションや処理は全てCloud Functionsでしたいと考える方もいらっしゃるのではないでしょうか。特に第2世代の登場でスペックが向上したことによりCloud Functionsでできることが増えたため、今後も様々な用途でアーキテクチャに組み込まれることが予想されます。
株式会社KUIXではただ導入・開発するだけでなく、導入後の利活用を実現することに着眼した、GCP・Azure・AWS、データレイク・DWH・データマート、BIツールの選定・導入からレポート作成、運用、啓蒙・展開までトータルのコンサルテーションなどを行っています。お困りの方は、ぜひお気軽にご連絡ください!お問い合わせはこちらから