Functions Framework を使用して関数を実行する
Cloud Functions は、オープンソースの Functions Framework ライブラリを使用して、デプロイされた関数を永続的な HTTP アプリケーションでラップします。
Functions Framework は、ローカルマシン、オンプレミス サーバー、Compute Engine、Cloud Run など、言語自体をサポートする他のプラットフォームでも実行できます。
依存関係をインストールする
関数のディレクトリに、使用する言語の Functions Framework ライブラリをインストールします。
詳細については、Java Functions Framework ライブラリをご覧ください。
Node.js
npm install --save-dev @google-cloud/functions-framework
Python
pip install functions-framework
Go
go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework
Java
Maven
Maven を使用している場合は、次のものを pom.xml
ファイルに追加します。
Gradle
Gradle を使用している場合は、次のものを build.gradle
ファイルに追加します。
C#
以下のコマンドは、.NET Templates を使用して、.NET Functions Framework ライブラリを依存関係とする .NET Cloud Functions の新しい関数のコードベースを作成します。
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
Ruby では、Cloud Functions にデプロイするために Functions Framework を関数の依存関係に追加する必要があります。
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
Functions Framework を構成する
Functions Framework を使用して関数を実行する前に、実行する関数のタイプと名前を指定する必要があります。これらの属性は、コマンドライン インターフェース(CLI)のフラグ、または環境変数として指定できます。
サポートされる関数のタイプ
Functions Framework 全体では、Cloud Functions でサポートされている 3 つのタイプの関数をすべてサポートしています。すべての言語ランタイムは、http
と、event
または cloudevent
のいずれかをサポートします。
関数タイプ | 署名タイプ | 説明 | サポート ランタイム | |
---|---|---|---|---|
HTTP でトリガーされる関数 |
http
|
HTTP リクエストを受信して応答する関数。 | すべてのランタイム | |
バックグラウンド関数 |
event
|
Cloud Functions 固有のイベント形式 | 第 1 世代のみ: Node.js、 Python、 Go、 Java | |
CloudEvent 関数 |
cloudevent
|
業界標準のイベント形式 |
第 2 世代: すべてのランタイム
第 1 世代: .NET、 Ruby、 PHP |
実行する関数を指定する
Functions Framework で関数を実行する前に、コード内のどの関数を実行するかを指定する必要があります。ほとんどの言語では、以下の表にあるターゲット モデルのメソッド名を指定します(Java や .NET など、このルールに対する例外も記載されています)。
言語ごとの手順
各言語でサポートされている構成オプションの一覧については、以下の表をご覧ください。
Node.js
CLI の引数 | 環境変数 | 説明 |
---|---|---|
--port
|
PORT
|
リクエストをリッスンするポート。(デフォルト: 8080 ) |
--target
|
FUNCTION_TARGET
|
呼び出される export 関数の名前。(デフォルト: function ) |
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
関数で使用される署名タイプ。http (デフォルト)、event 、cloudevent のいずれかになります。 |
Python
CLI の引数 | 環境変数 | 説明 |
---|---|---|
--port
|
PORT
|
リクエストをリッスンするポート。(デフォルト: 8080 ) |
--target
|
FUNCTION_TARGET
|
呼び出される export 関数の名前。(デフォルト: function ) |
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
関数で使用される署名タイプ。http (デフォルト)、event 、cloudevent のいずれかになります。 |
Go
環境変数 | 説明 |
---|---|
PORT
|
リクエストをリッスンするポート。(デフォルト: 8080 ) |
Java
引数名 | 環境変数 | 説明 |
---|---|---|
run.port
|
PORT
|
リクエストをリッスンするポート。(デフォルト: 8080 ) |
run.functionTarget
|
FUNCTION_TARGET
|
呼び出される export 関数の名前。(デフォルト: function ) |
C#
CLI の引数 | 環境変数 | 説明 |
---|---|---|
--port
|
PORT
|
リクエストをリッスンするポート。(デフォルト: 8080 ) |
--target (または引数のみ) |
FUNCTION_TARGET
|
呼び出される関数の classname。(デフォルト: function ) |
Ruby
CLI の引数 | 環境変数 | 説明 |
---|---|---|
--port
|
PORT
|
リクエストをリッスンするポート。(デフォルト: 8080 ) |
--target
|
FUNCTION_TARGET
|
呼び出される export 関数の名前。(デフォルト: function ) |
PHP
環境変数 | 説明 |
---|---|
FUNCTION_TARGET
|
呼び出される関数の名前。(デフォルト: function ) |
FUNCTION_SIGNATURE_TYPE
|
関数で使用される署名タイプ。http (デフォルト)、event 、cloudevent のいずれかになります。 |
Functions Framework を構成して実行する手順は次のとおりです。
Node.js
Node.js Functions Framework では、関数の名前と署名タイプをコマンドライン引数または環境変数で指定できます。
以下の例に示すように、必要な CLI 引数を指定した start
スクリプトを追加して、これらの値を package.json
ビルドファイルに指定することもできます。
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
YOUR_FUNCTION_NAME は関数のメソッド名で置き換えます。YOUR_SIGNATURE_TYPE(該当する場合)は、上の表にある関数の署名タイプで置き換えます。
Python
Python Functions Framework では、関数の名前と署名タイプをコマンドライン引数または環境変数で指定できます。コマンドライン引数は、フレームワークを実行するときに指定する必要があります。
Go
Go Functions Framework では、funcframework.RegisterHTTPFunctionContext
を使用して関数の対象と署名タイプを指定します。
Java
Java Functions Framework は、次の 3 つのソースから構成データを受け取ります(優先順位の最も高いものから順に示します)。
- コマンドライン引数
- ビルドファイル
- 環境変数
コマンドライン引数
Maven
実行するコマンドラインを指定するには、次のコマンドライン インターフェース(CLI)フラグを mvn
コマンドに追加します。
-Drun.functionTarget=YOUR_FUNCTION_NAME
同様の CLI フラグを追加して、ターゲット ポートを指定することもできます。
-Drun.port=12345
Gradle
Gradle の CLI フラグは、Maven の場合とほぼ同じです。Gradle の場合は、以下に示すように、各フラグの先頭の -D
を -P
に置き換えます。
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
ビルドファイル
実行する関数は、プロジェクトのビルドファイルで指定することもできます。Maven と Gradle には同様の CLI フラグがありますが、buildfile 句は大きく異なります。
Maven
Maven ビルドファイルの名前は pom.xml
です。このファイルに次の句を追加して、ターゲット関数を指定します。
<functionTarget>
は、関数のクラス名に置き換えます。(たとえば、パッケージ functions
内のクラス名が HelloCloudFunctions
の場合、クラス名は functions.HelloCloudFunctions
になります。これは、親のビルドファイル(pom.xml
または build.gradle
)からの相対パスです)。
Gradle
Gradle ビルドファイルの名前は、build.gradle
です。このファイルに次の句を追加して、ターゲット関数を指定します。
C#
dotnet new
と上記のいずれかのテンプレートを使用してプロジェクトを作成すると、.NET Functions Framework によって関数が自動的に検出されます。
プロジェクトに複数の関数がある場合は、フレームワークの実行セクションで関数の実行方法を確認してください。
Ruby
Ruby Functions Framework では、関数の名前と署名タイプをコマンドライン引数または環境変数で指定できます。コマンドライン引数は、フレームワークを実行するときに指定する必要があります。
PHP
PHP Functions Framework では、環境変数をコマンドライン環境変数として指定できます。
また、次の例に示すように、start
スクリプトを追加することで、これらの値を composer.json
ビルドファイルに指定することもできます。
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php" ] }
YOUR_FUNCTION_NAMEは、関数の名前で置き換えます。YOUR_SIGNATURE_TYPE(該当する場合)は、上の表にある関数の署名タイプに置き換えます。
Functions Framework を実行する
Functions Framework を使用して関数を実行するには、次のコマンドを使用します。デフォルトでは、PORT
値を明示的に指定しない限り、関数には localhost:8080
でアクセスできます。
Node.js
npm start
Python
functions-framework --target=YOUR_FUNCTION_NAME
YOUR_FUNCTION_NAME は、関数のメソッド名に置き換えます。
Go
cd cmd go build ./cmd
Java
Maven
次のコマンドを使用して、pom.xml
で指定された関数を実行します。
mvn function:run
コマンドライン引数で指定された関数を実行するには、次のコマンドを使用します。
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
YOUR_FUNCTION_NAME は、関数のクラス名に置き換えます。
Gradle
次のコマンドを使用して、build.gradle
で指定された関数を実行します。
./gradlew runFunction
コマンドライン引数で指定された関数を実行するには、次のコマンドを使用します。
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
YOUR_FUNCTION_NAME は、関数のクラス名に置き換えます。
C#
現在の .NET プロジェクトに関数が 1 つだけ存在する場合は、次のコマンドを使用して関数を実行します(これは、テンプレートで作成されたプロジェクトのデフォルトの構造です)。
dotnet run
.NET プロジェクトに複数の関数が含まれている場合は、次のコマンドを使用して特定の関数を実行します。YOUR_FUNCTION_CLASSNAME は、関数のクラス名(名前空間を含む)で置き換えます。
dotnet run YOUR_FUNCTION_CLASSNAME
複数の関数を同時に実行する場合は、複数の Functions Framework インスタンスを実行する必要があります。実行中のフレームワーク インスタンス間の競合を回避するため、各インスタンスで異なる PORT
値を使用する必要があります。次のコマンドは、PORT
の値が 8080
の関数を実行する方法を示しています。
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
Ruby
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
YOUR_FUNCTION_NAME は、関数のメソッド名に置き換えます。
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
YOUR_FUNCTION_NAME は、関数の名前に置き換えます。
関数を呼び出す
ローカルで実行する関数を操作する方法については、ローカル関数の呼び出しページをご覧ください。
クリーンアップ
関数の実行が終了したら、Ctrl + C を押して実行中のフレームワーク インスタンスを停止します。