Function as a Service(FaaS)は、クラウド コンピューティング モデルの一つであり、ユーザーが関数と呼ばれる小規模なモジュール式のコードを開発し、クラウド プロバイダが特定のイベントに応じてそれらを実行する仕組みです。このモデルでは、ユーザーがコードのロジックに完全に集中できる一方で、サーバーレス ランタイムがインフラストラクチャを管理します。物理ハードウェア、オペレーティング システム、ウェブサーバー ソフトウェアはクラウド プロバイダが管理します。
これは、従来のサーバーベースのアプリケーションやモノリシック アーキテクチャとは異なります。こうしたモデルでは、通常、アプリケーションが使用されていないときでも継続的に稼働し続けるサーバーをユーザーが管理します。FaaS では、特定のイベントがトリガーされた場合にのみプラットフォームがコードを実行します。必要なときにのみリソースを使用するため、効率的な方法でアプリケーションを構築できます。
FaaS と、Platform as a Service(PaaS)や Infrastructure as a Service(IaaS)などの他のクラウド サービス モデルとの違いを理解しておくことは有益です。FaaS は、プロバイダがサーバーを管理する「サーバーレス」という広範なカテゴリに属しますが、抽象化のレベルが異なります。サーバーレスとは、データベース、ストレージ、コンピューティングなど、プロバイダがサーバーを管理するあらゆるサービスを指します。FaaS は主として、イベントに応じてコードを実行するサーバーレスのコンピューティング部分です。
機能 | FaaS(Function as a Service) | PaaS(Platform as a Service) | IaaS(Infrastructure as a Service) |
プライマリ ユニット | 単一の関数(小さなコード スニペット) | アプリケーション全体 | 仮想マシン(VM) |
スケーラビリティ | リクエストごとの即時スケーリング(ゼロへのスケーリングを含む) | 遅い、構成されたルールに基づいてスケーリング | 手動または事前構成済みの自動スケーリング |
料金モデル | 実行時間(ミリ秒)に応じた料金 | 実行中のリソース(稼働時間)に応じた支払い | 割り当てられたリソース(サイズ / 時間)に応じた支払い |
メンテナンス | なし(プロバイダがすべてを管理) | 低い(プロバイダが OS / ランタイムを管理) | 高い(ユーザーが OS、アップデート、パッチを管理) |
最適な用途 | イベント ドリブンなタスク、グルーコード、データ処理 | ウェブアプリ、長時間実行サービス | レガシー アプリケーション、複雑なカスタム インフラストラクチャ |
機能
FaaS(Function as a Service)
PaaS(Platform as a Service)
IaaS(Infrastructure as a Service)
プライマリ ユニット
単一の関数(小さなコード スニペット)
アプリケーション全体
仮想マシン(VM)
スケーラビリティ
リクエストごとの即時スケーリング(ゼロへのスケーリングを含む)
遅い、構成されたルールに基づいてスケーリング
手動または事前構成済みの自動スケーリング
料金モデル
実行時間(ミリ秒)に応じた料金
実行中のリソース(稼働時間)に応じた支払い
割り当てられたリソース(サイズ / 時間)に応じた支払い
メンテナンス
なし(プロバイダがすべてを管理)
低い(プロバイダが OS / ランタイムを管理)
高い(ユーザーが OS、アップデート、パッチを管理)
最適な用途
イベント ドリブンなタスク、グルーコード、データ処理
ウェブアプリ、長時間実行サービス
レガシー アプリケーション、複雑なカスタム インフラストラクチャ
FaaS のワークフローはシンプルで効率的です。多くの場合、イベント ドリブン モデルに依存しており、アクションがコードをトリガーします。
FaaS は汎用性が高く、最新のアプリケーション アーキテクチャの多くに適合します。
複雑なアプリケーションを、イベントを介して通信する小さな独立したピースに分割できます。
FaaS は、ユーザーが画像をアップロードした直後にサイズ変更を行うようなタスクや、データが到着した時点でクリーンアップを行うようなタスクに適しています。
関数を使用して、モバイルアプリの背後にあるロジックを強化したり、IoT デバイスからデータを処理したりできます。
動画エンコードのように、多くの小さな同時ジョブに分割できるタスクは、FaaS 上で非常に効率的に動作します。
従来のスケジュール設定されたタスクを、特定の時間に実行される関数に置き換えることができ、これにより、メンテナンス作業やレポート生成を効率的に行えます。
FaaS クラウド テクノロジーの導入は、デベロッパーや企業にさまざまなメリットをもたらします。
自動かつ瞬時のスケーリング
アプリケーションは、ユーザー数が 1 人から数千人に増加した場合でも、そのトラフィックの急増に対応できます。手動で構成を変更する必要はありません。
優れた費用管理(従量課金制)
料金はコード実行時にのみ発生するため、アイドル状態のサーバーに対して料金を支払う場合と比較して、大幅な費用削減につながります。
開発速度の向上
デベロッパーは、サーバー管理やインフラストラクチャのセットアップに時間を費やすことなく、コードを記述して迅速にデプロイできます。
インフラ管理ではなくアプリケーション コードに注力
チームは、サーバーへのパッチ適用やオペレーティング システムの管理ではなく、お客様に価値を提供することに注力できます。
高可用性と復元力
FaaS プラットフォームは通常、複数のゾーンにわたってコードを実行するため、1 つのエリアで障害が発生してもアプリケーションは動作し続けます。
FaaS においてデベロッパーが直面する一般的な課題の一つに「コールド スタート」があります。関数がしばらく実行されていない場合、クラウド プロバイダはリソースを節約するために環境を停止します。次にイベントによって関数がトリガーされると、システムが環境をセットアップしてコードを読み込む際に、わずかな遅延が発生します。この遅延はコールド スタートと呼ばれ、アプリケーションの速度が低下する可能性があります。
アプリケーションで即時の応答が必要な場合は、以下の手順でレイテンシを最小限に抑えることができます。
Functions as a Service は、クラウド コンピューティング モデルの一つであり、Cloud Run functions はこのコンセプトを実現する Google Cloud のプロダクトです。サーバー管理なしでコードを実行できる、スケーラブルな従量課金制の FaaS ソリューションとして機能します。
Cloud Run functions を選択すると、サーバーレス アプローチを採用することになり、Google Cloud によって基盤となるインフラストラクチャが管理されます。ユーザーがコードを提供すると、プラットフォームが実行環境、オペレーティング システムの更新、自動スケーリング機能を管理します。この統合により、仮想マシンを 1 つもプロビジョニングすることなく、HTTP リクエストやデータの変更などのイベントに応答する単一目的の関数をデプロイできます。
このサービスは、関数のデプロイのシンプルさと Cloud Run テクノロジーの強力な機能を組み合わせたものです。デベロッパーは、Python、Node.js、Go、Java、.NET、Ruby などの言語を使用して、イベント ドリブン アプリケーションを構築できます。Google の堅牢なインフラストラクチャ上で実行されるため、関数は需要に応じて自動的に 0 から数千のインスタンスにまでスケールできます。
Function as a Service とサーバーレス コンピューティングについて詳しくは、以下のリソースをご覧ください。