Java で HTTP Cloud Functions の関数を作成してデプロイする
このガイドでは、Java ランタイムを使用して Cloud Functions の関数を記述するプロセスを説明します。Cloud Functions の関数には次の 2 つのタイプがあります。
- HTTP 関数。標準的な HTTP リクエストから呼び出します。
- イベント ドリブン関数。Pub/Sub トピック上のメッセージや Cloud Storage バケット内の変更など、Cloud インフラストラクチャのイベントによってトリガーされます。
このドキュメントでは、Maven または Gradle のいずれかを使用して、単純な HTTP 関数を作成し、ビルドする方法を説明します。
詳細については、HTTP 関数の作成とイベント ドリブン関数の作成をご覧ください。
準備
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Functions、Cloud Build、Artifact Registry、Cloud Run、and Cloud Logging API を有効にします。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Functions、Cloud Build、Artifact Registry、Cloud Run、and Cloud Logging API を有効にします。
- Google Cloud SDK をインストールして初期化します。
- 次のコマンドを使用して、
gcloud
コンポーネントを更新してインストールします。gcloud components update
-
開発環境を準備します。
関数を作成する
このセクションでは、関数を作成する方法について説明します。
Maven
関数コードで使用するため、ローカル システムにディレクトリを作成します。
Linux または Mac OS X:
mkdir ~/helloworld cd ~/helloworld
Windows:
mkdir %HOMEPATH%\helloworld cd %HOMEPATH%\helloworld
ソース ディレクトリとソースファイルを格納するプロジェクト構造を作成します。
mkdir -p ~/helloworld/src/main/java/functions touch ~/helloworld/src/main/java/functions/HelloWorld.java
HelloWorld.java
ファイルに次の内容を追加します。この例の関数は、「Hello, World!」という挨拶を出力します。
Gradle
関数コードで使用するため、ローカル システムにディレクトリを作成します。
Linux または Mac OS X:
mkdir ~/helloworld-gradle cd ~/helloworld-gradle
Windows:
mkdir %HOMEPATH%\helloworld-gradle cd %HOMEPATH%\helloworld-gradle
ソース ディレクトリとソースファイルを格納するプロジェクト構造を作成します。
mkdir -p src/main/java/functions touch src/main/java/functions/HelloWorld.java
HelloWorld.java
ファイルに次の内容を追加します。この例の関数は、「Hello, World!」という挨拶を出力します。
依存関係を指定する
次に、依存関係を設定します。
Maven
上記で作成した helloworld
ディレクトリにディレクトリを変更し、pom.xml
ファイルを作成します。
cd ~/helloworld
touch pom.xml
Maven を使用して依存関係を管理するには、プロジェクトの pom.xml ファイル内にある <dependencies>
セクションで依存関係を指定します。この演習では、次の内容を pom.xml
ファイルにコピーします。
Maven に基づく完全なサンプルについては、helloworld をご覧ください。
Gradle
上記で作成した helloworld-gradle
ディレクトリにディレクトリを変更し、build.gradle
ファイルを作成します。
cd ~/helloworld-gradle
touch build.gradle
Gradle を使用して依存関係を管理するには、プロジェクトの build.gradle ファイル内で依存関係を指定します。この演習では、次の内容を build.gradle
ファイルにコピーします。この build.gradle
ファイルには、関数をローカルで実行するためのカスタムタスクが含まれています。
Gradle に基づく完全なサンプルについては、helloworld-gradle をご覧ください。
関数をローカルでビルドしてテストする
関数をデプロイする前に、ローカルでビルドしてテストできます。
Maven
次のコマンドを実行して、関数がビルドしたことを確認します。
mvn compile
もう 1 つのオプションは、
mvn package
コマンドを使用して、Java コードをコンパイルし、テストを実行して、ターゲット ディレクトリ内の JAR ファイルにコードをパッケージ化するというものです。Maven ビルドのライフサイクルについて詳しくは、こちらをご覧ください。次のコマンドで関数を起動します。
mvn function:run
ブラウザで
http://localhost:8080
にアクセスするか、別のウィンドウからcurl localhost:8080
を実行して、関数をテストします。詳細については、ローカル関数にリクエストを送信するをご覧ください。
Gradle
次のコマンドを実行して、関数がビルドしたことを確認します。
gradle build
次のコマンドで関数を起動します。
gradle runFunction -Prun.functionTarget=functions.HelloWorld
ブラウザで
http://localhost:8080
にアクセスするか、別のウィンドウからcurl localhost:8080
を実行して、関数をテストします。詳細については、ローカル関数にリクエストを送信するをご覧ください。
関数をデプロイする
関数をデプロイするには、helloworld
ディレクトリ(maven
を使用している場合)または helloworld-gradle
ディレクトリ(gradle の場合)で次のコマンドを実行します。
gcloud functions deploy java-http-function \
--gen2 \
--entry-point=functions.HelloWorld \
--runtime=java17 \
--region=REGION \
--source=. \
--trigger-http \
--allow-unauthenticated
REGION は、関数をデプロイする Google Cloud リージョンの名前(例: us-west1
)に置き換えます。
オプションの --allow-unauthenticated
フラグを使用すると、認証なしで関数にアクセスできます。
java-http-function
は、関数が Google Cloud コンソールで識別される登録名で、--entry-point
は関数の完全修飾クラス名(FQN)を指定します。
デプロイした関数をテストする
関数がデプロイされたら、
gcloud functions deploy
コマンドの出力のuri
プロパティをメモするか、次のコマンドを使用して取得します。gcloud functions describe java-http-function \ --region=REGION
REGION は、関数をデプロイした Google Cloud リージョンの名前(例:
us-west1
)に置き換えます。ブラウザで、この URL にアクセスします。この関数は、「Hello World!」メッセージを返します。
関数のログを表示する
コマンドライン ツールでログを表示する
関数のログは、Cloud Logging UI または Google Cloud CLI を使用して確認できます。
gcloud CLI を使用して関数のログを表示するには、logs read
コマンドを使用します。
gcloud functions logs read \
--gen2 \
--limit=10 \
--region=REGION \
java-http-function
REGION は、関数をデプロイした Google Cloud リージョンの名前(例: us-west1
)に置き換えます。
出力は次のようになります。
LEVEL: I
NAME: my-first-function
TIME_UTC: 2023-05-29 23:09:57.708
LOG:
LEVEL: I
NAME: my-first-function
TIME_UTC: 2023-05-29 23:05:53.257
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "my--first--function-1" on port 8080.
LEVEL:
NAME: my-first-function
TIME_UTC: 2023-05-29 23:05:53.248
LOG: 2023-05-29 23:05:53.248:INFO:oejs.Server:main: Started @892ms
ロギング ダッシュボードでログを表示する
ロギング ダッシュボードで関数のログを表示するには、Cloud Functions の概要ページを開き、リストから関数の名前をクリックして、ログタブをクリックします。