Java で HTTP Cloud Functions の関数を作成してデプロイする
このガイドでは、Java ランタイムを使用して Cloud Functions の関数を記述するプロセスを説明します。Cloud Functions の関数には次の 2 つのタイプがあります。
- HTTP 関数。標準的な HTTP リクエストから呼び出します。
- イベント ドリブン関数。Cloud Pub/Sub トピックのメッセージや Cloud Storage バケットの変更など、Cloud インフラストラクチャのイベントを処理するために使用します。
このドキュメントでは、Maven または Gradle のいずれかを使用して、単純な HTTP 関数を作成し、ビルドする方法を説明します。
ガイドの構成
- Google Cloud SDK を使用した Google Cloud プロジェクトの作成
- 関数の作成
- 依存関係の指定
- ローカルでのビルドとテスト
- 関数のデプロイ
- デプロイされた関数のテスト
- ログの表示
Google Cloud SDK を使用した Google Cloud プロジェクトの作成
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Functions and Cloud Build API を有効にします。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Functions and Cloud Build 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 src/main/java/functions touch 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
Gradle
次のコマンドを実行して、関数がビルドしたことを確認します。
gradle build
関数をテストするには、次のコマンドを実行します。
gradle runFunction -Prun.functionTarget=functions.HelloWorld
テストが正常に完了すると、ウェブブラウザでアクセスできる URL(http://localhost:8080/
)が表示され、動作中の関数を見ることができます。Hello World!
というメッセージが表示されます。
別のターミナル ウィンドウから curl
を使用して、この関数にリクエストを送信することもできます。
curl localhost:8080
# Output: Hello World!
関数のデプロイ
Maven
HTTP トリガーを使用して関数をデプロイするには、helloworld
ディレクトリで次のコマンドを実行します。
gcloud functions deploy my-first-function --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated
ここで、my-first-function
は関数が Google Cloud コンソールで識別される登録名で、--entry-point
は関数の完全修飾クラス名(FQN)を指定します。
Gradle
HTTP トリガーを使用して関数をデプロイするには、helloworld-gradle
ディレクトリで次のコマンドを実行します。
gcloud functions deploy my-first-function --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated
ここで、my-first-function
は関数が Google Cloud コンソールで識別される登録名で、--entry-point
は関数の完全修飾クラス名(FQN)を指定します。
デプロイされた関数のテスト
関数がデプロイされたら、
httpsTrigger.url
プロパティをメモするか、次のコマンドを使用して検索します。gcloud functions describe my-first-function
次のようになります。
https://GCP_REGION-PROJECT_ID.cloudfunctions.net/my-first-function
ブラウザで、この URL にアクセスします。
Hello World!
というメッセージが表示されます。
ログの表示
コマンドライン ツールの使用
Cloud Functions のログは、Cloud Logging UI または Google Cloud CLI で表示できます。
gcloud CLI を使用して関数のログを表示するには、logs read
コマンドの後に関数の名前を続けます。
gcloud functions logs read my-first-function
出力は次のようになります。
LEVEL NAME EXECUTION_ID TIME_UTC LOG D my-first-function k2bqgroszo4u 2020-07-24 18:18:01.791 Function execution started D my-first-function k2bqgroszo4u 2020-07-24 18:18:01.958 Function execution took 168 ms, finished with status code: 200 ...
ロギング ダッシュボードを使う
Google Cloud コンソールから Cloud Functions のログを表示することもできます。