ローカルでの開発
Cloud Run functions は、標準のデプロイ環境の外部で関数を実行する複数のメソッドをサポートしています。これは、反復型開発や、デプロイ前に関数をテストする必要がある状況で特に有用です。
ユースケース
関数をデプロイすることなく実行できる機能により、ローカルテスト、データの局所性の制限の遵守、マルチクラウド デプロイを簡素化できます。
ローカルテスト
変更のたびに関数を再デプロイしてテストするには、毎回デプロイを待つ必要があります。一方、開発環境で関数を直接テストすると、反復テストサイクルを短縮できます。
テスト実施の詳細については、デプロイ前に Cloud Run 関数をテストするをご覧ください。
データの局所性の制限
規制やポリシーによって、Cloud Run functions 自体からはアクセスできない特定の地域、組織、ネットワーク境界にデータを格納することが必要になる場合があります。
データの局所性の制限に準拠したプラットフォームが Cloud Run functions の抽象化レイヤのいずれかと互換性がある場合、そのプラットフォームで関数を直接実行できます。
マルチクラウド デプロイ
マルチクラウド関数のデプロイは、信頼性が重要となる環境でダウンタイムのリスクを低減するために確立されたパターンです。Cloud Run functions 自体以外の環境に関数をデプロイすると、アプリケーションに対する計画外のダウンタイムによるリスクを軽減できます。
実装の選択
独自の関数ホスティング環境を設定する前に、次の 2 つの重要な選択を行う必要があります。
- 使用する抽象化レイヤ
- 実行する関数のタイプ
抽象化レイヤ
Cloud Run functions 自体がマルチレイヤ アーキテクチャを使用しています。また、その大半はオープンソースです。これらのオープンソース コンポーネントを使用すると、Cloud Run functions 用に設計されたコードを他のプラットフォームで実行できます。
このアーキテクチャの 2 つのコンポーネント(Functions Framework と Functions エミュレータ)は、Cloud Run functions のインフラストラクチャの外部で実行できます。このドキュメントでは、これらのレイヤの目的と関係について説明します。
この図は、Cloud Run functions、Cloud Run、その他のコンテナベースのプラットフォーム上の関数デプロイの一般的なレイアウトを示しています。
イベントタイプ
Cloud Run functions には次の 2 種類の関数があります。
HTTP 関数は Webhook などの任意の HTTP リクエストによってトリガーできます。イベント ドリブン関数は、他の Google Cloud プロダクトによって生成されたイベントを受信します。
抽象化レイヤの選択
Functions Framework または Functions エミュレータを使用して、関数をローカルで実行できます。
Functions Framework は、受信した HTTP リクエストを言語固有の関数呼び出しにアンマーシャルするために Cloud Run functions 内で使用される一連のオープンソース ライブラリです。これにより、関数をローカルで実行可能な HTTP サービスに変換します。
Functions エミュレータは、Cloud Native Buildpack と Docker を使用することで Functions Framework によって作成された HTTP サービスをラップして、実行可能なコンテナにビルドし、Cloud Run functions のコンテナベースのアーキテクチャ上で実行します。
どちらの方法にも長所と短所があります。
- Functions Framework ベースの環境では、必要なリソースが少なくてすみます。
- Functions Framework では、基盤となるコンテナ化ソフトウェア(Docker など)は必要ありません。
- Functions Frameworks ベースの環境では、基盤となる言語インフラストラクチャ(パッケージ マネージャーや言語ランタイムなど)が必要になります。
- Functions エミュレータは、呼び出しやデプロイなどの本番環境コマンドをミラーリングします。
- Functions エミュレータは、本番環境にデプロイされたときの関数の実行方法を忠実に再現します。
ローカルでの関数の実行
Functions Framework と Functions エミュレータはどちらも、HTTP リクエストを関数に転送することで機能します。
Functions Framework を使用して関数をローカルで実行する方法の詳細については、Functions Framework を実行するをご覧ください。
Functions エミュレータを使用して関数をローカルで実行する方法の詳細については、Functions エミュレータを使用して関数を実行するをご覧ください。