Google Cloud FunctionsとJava 11の連携
近年、Google Cloud Functionsが多くの開発者に利用されています。このサービスは、サーバーを手動で管理することなく、コードをクラウド上で実行することを可能にします。特に、Javaを使った開発が行いやすくなる機能が加わったことで、エンタープライズ向けの開発でもその利便性が向上しています。
新しいJava 11ランタイムの導入
2020年5月、Java 11ランタイムのベータ版がリリースされ、Javaを使用したGoogle Cloud Functionsの開発が可能になりました。これにより、Node.jsやGo、Pythonだけでなく、JAVAプログラミング言語でもCloud Functionsを活用できるようになりました。
Cloud Functionsとは?
Cloud Functionsでは、HTTPリクエストやCloud Pub/Subからのメッセージ、新たにアップロードされたファイルに基づいて、リアクションを実行することができます。つまり、任意のイベントに応じて動作するプログラムを簡単に作成・運用できるのです。
関数の形状
Cloud Functionsには主に2種類の関数があります:
- HTTP関数: 受信したHTTPリクエストに応答するタイプ
- バックグラウンド関数: Cloud eventsに反応するタイプ
Java Functions Frameworkは、これらの関数を作成するためのAPIを提供しています。このAPIを使って、ローカルでの実行やデバッグ、さらにはクラウドやオンプレミスへのデプロイも可能です。
HTTPリクエストに応答する関数の実装
HTTPリクエストを処理するためには、HttpFunctionインターフェースを実装する必要があります。
import com.google.cloud.functions.*;
import java.io.*;
public class Example implements HttpFunction {
@Override
public void service(HttpRequest request, HttpResponse response) throws IOException {
var writer = response.getWriter();
writer.write("Hello developers!");
}
}
クラウドイベントに応じるバックグラウンド関数の実装
バックグラウンド関数では、例えば新しいPub/SubメッセージやCloud Storageファイルの更新に反応します。ここではJSONペイロードを扱う方法が2つあります。
- JSON文字列を自分で解析するRawBackgroundFunction
- Gsonライブラリを使ってオブジェクトを自動的に変換するBackgroundFunction
import com.google.cloud.functions.Context;
import com.google.cloud.functions.RawBackgroundFunction;
public class RawFunction implements RawBackgroundFunction {
@Override
public void accept(String json, Context context) {
// JSONを扱うコード
}
}
ローカルで関数を実行する
コードを開発することは素晴らしいですが、自身のコードが実際に動作するのを見るのはもっと素晴らしい体験です。Functions Frameworkには、ローカルで関数を実行するためのツールが含まれています。
Mavenでの実行
もしMavenを使用している場合は、以下のようにpom.xmlにFunction Mavenプラグインを追加することができます。
<plugin>
<groupId>com.google.cloud.functions</groupId>
<artifactId>function-maven-plugin</artifactId>
<version>0.9.2</version>
<configuration>
<functionTarget>com.example.Example</functionTarget>
</configuration>
</plugin>
その後、コマンドラインで以下を実行します:
$ mvn function:run
Gradleでの実行
Gradleの場合は、専用のプラグインはないものの、以下の手順で設定することができます。
configurations {
invoker
}
dependencies {
invoker 'com.google.cloud.functions.invoker:java-function-invoker:1.0.0-beta1'
}
tasks.register("runFunction", JavaExec) {
main = 'com.google.cloud.functions.invoker.runner.Invoker'
classpath(configurations.invoker)
args('--target', 'com.example.Example', '--port', '8080')
}
関数のデプロイ
関数はMavenプラグインを使ってデプロイすることもできますが、ここではgcloudコマンドラインを使用してデプロイする方法に焦点を当てます。
$ gcloud functions deploy exampleFn
--region europe-west1
--trigger-http
--allow-unauthenticated
--runtime java11
--entry-point com.example.Example
--memory 512MB
他の言語やフレームワークのサポート
Java以外の言語として、GroovyやKotlin、Scalaなども使用可能で、MicronautやSpring Bootなどのサードパーティフレームワークと連携することもできます。
まとめ
今回は、Google Cloud FunctionsにおけるJava 11の利用と、その設定・デプロイの流れを解説しました。これからは、ぜひ自分の好きなプログラミング言語やフレームワークを使って、Cloud Functionsを試してみてはいかがでしょうか。Google Cloud Platformの無料トライアルを活用して、新しい可能性を広げていきましょう!