Java で Cloud Run functions の HTTP 関数を作成してデプロイする
このガイドでは、Java ランタイムを使用して Cloud Run functions を記述するプロセスを説明します。Cloud Run functions には次の 2 つのタイプがあります。
- HTTP 関数。標準的な HTTP リクエストから呼び出します。
- イベント ドリブン関数。Pub/Sub トピック上のメッセージや Cloud Storage バケット内の変更など、Cloud インフラストラクチャのイベントによってトリガーされます。
このドキュメントでは、Maven または Gradle のいずれかを使用して、単純な HTTP 関数を作成し、ビルドする方法を説明します。
詳しくは、HTTP 関数の作成とイベント ドリブン関数の作成をご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.
- 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 Run functions の概要ページを開き、リストから関数の名前をクリックして、[ログ] タブをクリックします。