Function as a Service(FaaS)とは

Function as a Service(FaaS)は、クラウド コンピューティング モデルの一つであり、ユーザーが関数と呼ばれる小規模なモジュール式のコードを開発し、クラウド プロバイダが特定のイベントに応じてそれらを実行する仕組みです。このモデルでは、ユーザーがコードのロジックに完全に集中できる一方で、サーバーレス ランタイムがインフラストラクチャを管理します。物理ハードウェア、オペレーティング システム、ウェブサーバー ソフトウェアはクラウド プロバイダが管理します。

これは、従来のサーバーベースのアプリケーションやモノリシック アーキテクチャとは異なります。こうしたモデルでは、通常、アプリケーションが使用されていないときでも継続的に稼働し続けるサーバーをユーザーが管理します。FaaS では、特定のイベントがトリガーされた場合にのみプラットフォームがコードを実行します。必要なときにのみリソースを使用するため、効率的な方法でアプリケーションを構築できます。

FaaS、PaaS、IaaS の比較

FaaS と、Platform as a Service(PaaS)や Infrastructure as a Service(IaaS)などの他のクラウド サービス モデルとの違いを理解しておくことは有益です。FaaS は、プロバイダがサーバーを管理する「サーバーレス」という広範なカテゴリに属しますが、抽象化のレベルが異なります。サーバーレスとは、データベース、ストレージ、コンピューティングなど、プロバイダがサーバーを管理するあらゆるサービスを指します。FaaS は主として、イベントに応じてコードを実行するサーバーレスのコンピューティング部分です。

  • FaaS はイベント ドリブンなコードに重点を置いています。ファイルのアップロードなどのイベントに応じて特定のタスクを実行する単一の関数をデプロイします。プラットフォームはスケーリングを自動的に処理し、アイドル状態のときはゼロまでスケールダウンすることがよくあります。
  • PaaS は、アプリケーション全体を構築して実行するためのプラットフォームを提供します。ハードウェアやオペレーティング システムの管理が不要な点は共通していますが、PaaS では通常、ユーザー リクエストを待機する状態でアプリケーションが常時稼働しています。個々のイベント トリガーよりも、完全なウェブ アプリケーションに適しています。
  • IaaS は最も高いレベルの制御が可能ですが、管理の負荷も大きくなります。仮想マシン(VM)やストレージはレンタルしますが、オペレーティング システム、ランタイム、ミドルウェアはユーザーが管理する必要があります。

クラウド サービスモデルの比較

機能

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、アップデート、パッチを管理)

最適な用途

イベント ドリブンなタスク、グルーコード、データ処理

ウェブアプリ、長時間実行サービス

レガシー アプリケーション、複雑なカスタム インフラストラクチャ

Functions as a Service の仕組み

FaaS のワークフローはシンプルで効率的です。多くの場合、イベント ドリブン モデルに依存しており、アクションがコードをトリガーします。

  1. コードのデプロイ: 単一のタスクを実行する小さなコードまたは関数を記述し、クラウド プロバイダにアップロードします。
  2. イベントのトリガー: ユーザーがボタンをクリックする、ストレージにファイルをアップロードする、キューにメッセージが到着するなど、イベントが発生します。
  3. リソースの割り当て: クラウド プロバイダがイベントを認識し、必要な実行環境を即座にプロビジョニングします。
  4. 関数の実行: コードが実行され、データ処理や通知送の信などのタスクを実行して結果を生成します。
  5. 無効化と課金: タスクが完了するとリソースはすぐに解放され、コードが実行された時間(ミリ秒単位)にのみ課金されます。

FaaS の一般的なユースケース

FaaS は汎用性が高く、最新のアプリケーション アーキテクチャの多くに適合します。

複雑なアプリケーションを、イベントを介して通信する小さな独立したピースに分割できます。

FaaS は、ユーザーが画像をアップロードした直後にサイズ変更を行うようなタスクや、データが到着した時点でクリーンアップを行うようなタスクに適しています。

関数を使用して、モバイルアプリの背後にあるロジックを強化したり、IoT デバイスからデータを処理したりできます。

動画エンコードのように、多くの小さな同時ジョブに分割できるタスクは、FaaS 上で非常に効率的に動作します。

従来のスケジュール設定されたタスクを、特定の時間に実行される関数に置き換えることができ、これにより、メンテナンス作業やレポート生成を効率的に行えます。

FaaS を導入する主なメリット

FaaS クラウド テクノロジーの導入は、デベロッパーや企業にさまざまなメリットをもたらします。

自動かつ瞬時のスケーリング

アプリケーションは、ユーザー数が 1 人から数千人に増加した場合でも、そのトラフィックの急増に対応できます。手動で構成を変更する必要はありません。

優れた費用管理(従量課金制)

料金はコード実行時にのみ発生するため、アイドル状態のサーバーに対して料金を支払う場合と比較して、大幅な費用削減につながります。

開発速度の向上

デベロッパーは、サーバー管理やインフラストラクチャのセットアップに時間を費やすことなく、コードを記述して迅速にデプロイできます。

インフラ管理ではなくアプリケーション コードに注力

チームは、サーバーへのパッチ適用やオペレーティング システムの管理ではなく、お客様に価値を提供することに注力できます。

高可用性と復元力

FaaS プラットフォームは通常、複数のゾーンにわたってコードを実行するため、1 つのエリアで障害が発生してもアプリケーションは動作し続けます。

デベロッパーがよく直面する問題: 「コールド スタート」

FaaS においてデベロッパーが直面する一般的な課題の一つに「コールド スタート」があります。関数がしばらく実行されていない場合、クラウド プロバイダはリソースを節約するために環境を停止します。次にイベントによって関数がトリガーされると、システムが環境をセットアップしてコードを読み込む際に、わずかな遅延が発生します。この遅延はコールド スタートと呼ばれ、アプリケーションの速度が低下する可能性があります。

コールド スタートを減らす方法

アプリケーションで即時の応答が必要な場合は、以下の手順でレイテンシを最小限に抑えることができます。

  1. コードサイズを縮小する: コードを見直して、厳密には必要のない大規模なライブラリや依存関係を削除します。関数が小さいほど、読み込みが速くなります。
  2. 遅延読み込みを使用する: 関数が開始されたときにすぐに読み込むのではなく、関数ロジック内で実際に必要になったときにのみ、処理に時間がかかる変数や接続を読み込むようにコードを構成します。
  3. 最小インスタンス数を構成する: 主要なクラウド プロバイダのほとんどで、「最小インスタンス」数を設定できます。これにより、関数のインスタンスが少なくとも 1 つは常にウォーム状態になり、すぐに使用できるため、起動の遅延がなくなります。
  4. より高速なランタイムを選択する: Go や Python などのプログラミング言語は、通常、Java などの言語よりも起動が速くなります。速度が重要な場合は、レイテンシの影響を受けやすい関数を軽量な言語で記述することを検討してください。

Google Cloud でビジネスの課題を解決する

新規のお客様には、Google Cloud で使用できる無料クレジット $300 分を差し上げます。

FaaS と Cloud Run 関数

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 とサーバーレス コンピューティングについて詳しくは、以下のリソースをご覧ください。

次のステップ

$300 分の無料クレジットと 20 以上の Always Free プロダクトを活用して、Google Cloud で構築を開始しましょう。

  • Google Cloud プロダクト
  • 100 種類を超えるプロダクトをご用意しています。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。また、すべてのお客様に 25 以上のプロダクトを無料でご利用いただけます(毎月の使用量上限があります)。
Google Cloud