Cloud Run 関数を作成する
Cloud Run 関数では、多くのプログラミング言語でソースコードを記述できます。選択した言語ランタイムと記述する関数のタイプによって、コードを構造化して関数を実装する方法が異なります。このページでは、Cloud Run 関数のタイプの概要とソースコードの要件について説明します。
Cloud Run 関数のタイプ
Cloud Run 関数には次の 2 つのタイプがあります。
HTTP 関数。HTTP リクエストを処理し、HTTP トリガーを使用します。HTTP 関数の実装については、HTTP 関数の作成をご覧ください。
イベント ドリブン関数。クラウド環境からのイベントを処理し、Cloud Run 関数トリガーの説明に従ってイベント トリガーを使用します。イベント ドリブン関数の実装については、イベント ドリブン関数の作成をご覧ください。
関数で URL エンドポイントを使用し、Webhook などの HTTP リクエストに応答する必要がある場合は、HTTP 関数を使用します。Pub/Sub トピックのメッセージや Cloud Storage バケットの変更など、Google Cloud プロジェクト内のイベントに応答して関数を直接トリガーする場合は、イベント ドリブン関数を使用します。
ソース ディレクトリの構造
Cloud Run 関数で関数の定義を見つけられるように、言語ランタイムごとにソースコードの構造について要件があります。以下では、各ランタイムの関数の基本的なディレクトリ構造に示します。
Node.js
Node.js 関数の基本的なディレクトリ構造は次のとおりです。
. ├── index.js └── package.json
デフォルトでは、Cloud Run 関数は関数ディレクトリのルートにある index.js
というファイルからソースコードを読み込みます。別のメイン ソースファイルを指定するには、package.json
ファイルの main
フィールドを使用します。
package.json
ファイルには、依存関係として Functions Framework for Node.js も含める必要があります。
{
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
メインファイル内のコードで関数エントリ ポイントを定義する必要があります。他のコードおよび Node.js モジュールは通常どおりインポートできます。メインファイルでは、個別にデプロイ可能な複数の関数エントリ ポイントを定義できます。
Python
Python 関数の基本的なディレクトリ構造は次のとおりです。
. ├── main.py └── requirements.txt
Cloud Run 関数は、関数ディレクトリのルートにある main.py
という名前のファイルからソースコードを読み込みます。メインファイルの名前は main.py
にする必要があります。
requirements.txt
ファイルには、依存関係として Functions Framework for Python が含まれている必要があります。
functions-framework==3.*
main.py
ファイルのコードで関数エントリ ポイントを定義する必要があります。他のコードと外部依存関係は通常どおりインポートできます。また、main.py
ファイルを使用して、個別にデプロイできる複数の関数エントリ ポイントを定義することもできます。
Go
Go 関数の基本的なディレクトリ構造は次のとおりです。
. ├── myfunction.go └── go.mod
関数は、Go パッケージ内のプロジェクトのルートに置く必要があります。パッケージとそのソースファイルには任意の名前を付けることができます。ただし、関数を package main
に含めることはできません。ローカルテストなどで main
パッケージが必要な場合は、サブディレクトリにパッケージを作成できます。
. ├── myfunction.go ├── go.mod └── cmd/ └── main.go
go.mod
ファイルには、依存関係として Functions Framework for Go が含まれている必要があります。
module example.com/my-module
require (
github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)
ルート パッケージのコードは関数エントリ ポイントを定義する必要があります。サブパッケージと依存関係から通常どおり他のコードをインポートできます。また、パッケージで、個別にデプロイできる複数の関数エントリ ポイントを定義することもできます。
Java
Java 関数の基本的なディレクトリ構造は次のとおりです。
. ├── pom.xml └── src/ └── main/ └── java/ └── MyFunction.java
Java のソースファイルは src/main/java/
ディレクトリに配置する必要があり、任意の名前を付けることができます。ソースファイルでパッケージが宣言されている場合は、src/main/java
の下にパッケージの名前を含むディレクトリを追加します。
. ├── pom.xml └── src/ └── main/ └── java/ └── mypackage/ └── MyFunction.java
関連するテストを src/test/java/
サブディレクトリに配置することをおすすめします。
pom.xml
ファイルには、依存関係として Functions Framework for Java が含まれている必要があります。
...
<dependency>
<groupId>com.google.cloud.functions</groupId>
<artifactId>functions-framework-api</artifactId>
<version>1.0.4</version>
</dependency>
...
ソースファイルのコードは関数のエントリ ポイントを定義します。他のコードおよび外部依存関係は通常どおりインポートできます。また、ソースファイルで、個別にデプロイできる複数の関数エントリ ポイントを定義することもできます。
C#
.NET 関数の基本的なディレクトリ構造は次のとおりです。
. ├── MyFunction.cs └── MyProject.csproj
プロジェクトは、他の .NET ソースコードと同じように構造化できます。ソースファイルには任意の名前を付けることができます。
プロジェクト ファイルには、依存関係として Functions Framework for .NET が含まれている必要があります。
...
<PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...
ソースファイルのコードは関数のエントリ ポイントを定義します。他のコードおよび外部依存関係は通常どおりインポートできます。また、ソースファイルで、個別にデプロイできる複数の関数エントリ ポイントを定義することもできます。
.NET 用 Cloud Run 関数テンプレート パッケージを使用して、必要なファイルを生成することもできます。
Ruby
Ruby 関数の基本的なディレクトリ構造は次のとおりです。
. ├── app.rb ├── Gemfile └── Gemfile.lock
Cloud Run 関数は、関数ディレクトリのルートにある app.rb
という名前のファイルからソースコードを読み込みます。メインファイルの名前は app.rb
にする必要があります。
Gemfile
ファイルには、依存関係として Functions Framework for Ruby が含まれている必要があります。
source "https://rubygems.org"
gem "functions_framework", "~> 1.0"
app.rb
ファイルのコードで関数エントリ ポイントを定義する必要があります。他のコードと外部依存関係は通常どおりインポートできます。また、app.rb
ファイルを使用して、個別にデプロイできる複数の関数エントリ ポイントを定義することもできます。
PHP
PHP 関数の基本的なディレクトリ構造は次のとおりです。
. ├── index.php └── composer.json
Cloud Run 関数は、関数ディレクトリのルートにある index.php
という名前のファイルからソースコードを読み込みます。メインファイルの名前は index.php
にする必要があります。
composer.json
ファイルには、依存関係として Functions Framework for PHP が含まれている必要があります。
{
"require": {
"google/cloud-functions-framework": "^1.1"
}
}
index.php
ファイルのコードで関数エントリ ポイントを定義する必要があります。他のコードと外部依存関係は通常どおりインポートできます。また、index.php
ファイルを使用して、個別にデプロイできる複数の関数エントリ ポイントを定義することもできます。
複数の関数を 1 つのプロジェクトにグループ化する場合、すべての関数が同じ依存関係のセットを共有する結果になる可能性があります。ただし、一部の関数は依存関係の全部は必要としない場合があります。
可能であれば、大規模な関数のコードベースを分割し、上記のように、独自のソースファイルとプロジェクト構成ファイルで各関数を最上位のディレクトリに配置することをおすすめします。このアプローチにより、特定の関数に必要な依存関係の数が最小限に抑えられ、関数が必要とするメモリ量が削減されます。
関数のエントリ ポイント
ソースコードでは、関数のエントリ ポイントを定義する必要があります。エントリ ポイントは、Cloud Run 関数が呼び出されたときに実行されるコードです。このエントリ ポイントは、関数のデプロイ時に指定します。
エントリ ポイントの定義方法は、使用する言語ランタイムによって異なります。一部の言語では、エントリ ポイントが関数で、他の言語ではエントリ ポイントがクラスになっています。エントリ ポイントの定義と、さまざまな言語での Cloud Run 関数の実装について詳しくは、HTTP 関数の作成およびイベント ドリブン関数の作成をご覧ください。
依存関係
依存関係は、各ランタイムの標準的なツールを使用して管理できます。詳細については、該当するページをご覧ください。
- Node.js での依存関係の指定
- Python での依存関係の指定
- Go での依存関係の指定
- Java での依存関係の指定
- .NET での依存関係の指定
- Ruby での依存関係の指定
- PHP での依存関係の指定
次のステップ
- HTTP 関数の作成方法を学習する。
- イベント ドリブン関数の作成方法を学習する。
- Cloud Run 関数のトリガーについて学習する。