ローカルでの開発

Cloud Functions は、Cloud Functions の外部で関数を実行する複数のメソッドをサポートしています。これは、反復型開発や、デプロイ前に関数をテストする必要がある状況で特に有用です。

ユースケース

関数を Cloud Functions の外部で実行する機能は、ローカルテスト環境、データの局所性の制限の遵守、マルチクラウド デプロイなど、いくつかのユースケースで役立ちます。

ローカルテスト

多くの開発パラダイムは、コードを比較的迅速にテストできることを前提にしています。

Cloud Functions 自体でコードをテストする場合は、デプロイされたコードとログエントリが使用可能になるまで待機します。このため、開発マシン上で関数を実行してテストすると、テストプロセスを非常に迅速に行うことができます(結果として開発プロセスも高速化されます)。

データの局所性の制限

規制やポリシーによって、Cloud Functions 自体からはアクセスできない特定の地域、組織、ネットワーク境界にデータを格納することが必要になる場合があります。

データの局所性の制限に準拠したプラットフォームが Cloud Functions の抽象化レイヤのいずれかと互換性がある場合、そのプラットフォームで関数を直接実行できます。

マルチクラウド デプロイ

マルチクラウド関数のデプロイは、信頼性が重要となる環境でダウンタイムのリスクを低減するために確立されたパターンです。Cloud Functions 自体以外の環境に関数をデプロイすると、アプリケーションに対する計画外のダウンタイムによるリスクを軽減できます。

実装の選択

独自の関数ホスティング環境を設定する前に、次の 2 つの重要な選択を行う必要があります。

  • 使用する抽象化レイヤ
  • 実行する関数のタイプ

抽象化レイヤ

Cloud Functions 自体がマルチレイヤ アーキテクチャを使用しています。また、その大半はオープンソースです。これらのオープンソース コンポーネントを使用すると、Cloud Functions 用に設計されたコードを他のプラットフォームで実行できます。

このアーキテクチャの主な 2 つのオープンソース コンポーネント(Function FrameworksBuildpack)は Cloud Functions の外部で実行できます。このドキュメントでは、これらのレイヤの目的と関係について説明します。

次の図は、Cloud Functions、Cloud Run、その他のコンテナベースのプラットフォーム上の関数デプロイの一般的なレイアウトを示しています。

関数のラッピング レイアウト: 関数、関数フレームワーク、Buildpack、ホスト プラットフォーム

イベントの種類

Cloud Functions には次の 3 種類の関数があります。

HTTP 関数は Webhook などの任意の HTTP リクエストによってトリガーできます。バックグラウンド関数と CloudEvent 関数は、他の Google Cloud Platform プロダクトによって生成されたイベントを受信します。

HTTP 関数はすべての Cloud Functions ランタイムでサポートされていますが、CloudEvent 関数とバックグラウンド関数は、サポートされていないランタイムがあります。この 2 種類の関数は、ファーストパーティのイベントによってトリガーされますが、関数の署名とイベントの構造が異なります。Ruby.NET は CloudEvents 関数のみをサポートし、Node.jsPythonJavaGo はバックグラウンド関数のみをサポートします。

抽象化レイヤの選択

関数をローカルで実行するには、Function Frameworks または Cloud Native Buildpacks を使用します。

Function Frameworks は Cloud Functions 内で使用されるオープンソースのライブラリで、受信した HTTP リクエストを言語固有の関数呼び出しにアンマーシャルします。これにより、関数をローカルで実行可能な HTTP サービスに変換します。

Cloud Native Buildpacks は、Function Frameworks によって作成される HTTP サービスをラップして実行可能な Docker オブジェクトを作成するために使用されます。作成されたオブジェクトは Cloud Functions のコンテナベースのアーキテクチャで実行されます。

どちらの方法にも長所と短所があります。

  • Functions Framework ベースの環境では、必要なリソースが少なくてすみます。
  • Functions Frameworks は、基盤となるコンテナ化ソフトウェア(Docker など)を必要としません。
  • Functions Frameworks ベースの環境では、基盤となる言語インフラストラクチャ(パッケージ マネージャーや言語ランタイムなど)が必要になります。

一般に、ポータビリティやコンテナ化が必要な場合を除き、Functions Frameworks を使用することをおすすめします。

ローカルでの関数の実行

Function Frameworks と Buildpacks は、HTTP リクエストを関数に転送することで機能します。ローカルで実行する関数を呼び出す方法の詳細については、関数フレームワークの実行をご覧ください。