Google クラウド機能
Google Cloud Functions アダプターを使用すると、Spring Cloud Function アプリを Google クラウド機能 サーバーレスプラットフォームで実行できるようになります。この関数は、オープンソース Google 関数 フレームワーク (Java 用) [GitHub] (英語) を使用してローカルで実行することも、GCP 上で実行することもできます。
プロジェクトの依存関係
プロジェクトに spring-cloud-function-adapter-gcp
依存関係を追加することから始めます。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-adapter-gcp</artifactId>
</dependency>
...
</dependencies>
さらに、デプロイする関数の JAR をビルドする spring-boot-maven-plugin
を追加します。
spring-boot-maven-plugin の依存関係として spring-cloud-function-adapter-gcp も参照していることに注意してください。これは、Google Cloud Functions 上の デプロイ用の正しい JAR 形式で関数をパッケージ化するようにプラグインを変更するために必要です。 |
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<outputDirectory>target/deploy</outputDirectory>
</configuration>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-adapter-gcp</artifactId>
</dependency>
</dependencies>
</plugin>
最後に、Java 用 Google 関数 フレームワークの一部として提供される Maven プラグインを追加します。これにより、mvn function:run
を介して関数をローカルでテストできるようになります。
関数ターゲットは常に org.springframework.cloud.function.adapter.gcp.GcfJarLauncher に設定する必要があります。これは、Google Cloud Functions プラットフォームから Spring Cloud Function へのエントリポイントとして機能するアダプタークラスです。 |
<plugin>
<groupId>com.google.cloud.functions</groupId>
<artifactId>function-maven-plugin</artifactId>
<version>0.9.1</version>
<configuration>
<functionTarget>org.springframework.cloud.function.adapter.gcp.GcfJarLauncher</functionTarget>
<port>8080</port>
</configuration>
</plugin>
動作する pom.xml
の完全な例は、Spring Cloud 関数 GCP サンプル [GitHub] (英語) にあります。
HTTP 関数
Google Cloud Functions は、HTTP リクエストによって呼び出される関数である HTTP 関数 のデプロイをサポートしています。以下のセクションでは、Spring Cloud Function を HTTP 関数としてデプロイする手順について説明します。
入門
簡単な Spring Cloud Function の例から始めましょう。
@SpringBootApplication
public class CloudFunctionMain {
public static void main(String[] args) {
SpringApplication.run(CloudFunctionMain.class, args);
}
@Bean
public Function<String, String> uppercase() {
return value -> value.toUpperCase();
}
}
resources/META-INF/MANIFEST.MF
で構成のメインクラスを指定します。
Main-Class: com.example.CloudFunctionMain
次に、関数をローカルで実行します。これは、プロジェクトの依存関係セクションで説明されている Google Cloud Functions function-maven-plugin
によって提供されます。
mvn function:run
HTTP 関数を呼び出します。
curl http://localhost:8080/ -d "hello"
GCP へのビルドとデプロイ
アプリケーションをパッケージ化することから始めます。
mvn package
上記で定義したカスタム spring-boot-maven-plugin
プラグインを追加した場合は、結果の JAR が target/deploy
ディレクトリに表示されるはずです。この JAR は、デプロイから Google Cloud Functions 用に正しくフォーマットされています。
次に、Cloud SDK CLI がインストールされていることを確認します。
プロジェクトのベースディレクトリから、次のコマンドを実行してデプロイします。
gcloud functions deploy function-sample-gcp-http \ --entry-point org.springframework.cloud.function.adapter.gcp.GcfJarLauncher \ --runtime java11 \ --trigger-http \ --source target/deploy \ --memory 512MB
HTTP 関数を呼び出します。
curl https://REGION-PROJECT_ID.cloudfunctions.net/function-sample-gcp-http -d "hello"
カスタム HTTP statusCode の設定:
Functions can specify a custom HTTP response code by setting the `FunctionInvoker.HTTP_STATUS_CODE` header.
@Bean
public Function<String, Message<String>> function() {
String payload = "hello";
Message<String> message = MessageBuilder.withPayload(payload).setHeader(FunctionInvoker.HTTP_STATUS_CODE, 404).build();
return input -> message;
};
バックグラウンド関数
Google Cloud Functions は、Cloud Pub/Sub トピックのメッセージ、Cloud Storage バケットの変更、Firebase (英語) イベントなどのイベントに応じて間接的に呼び出されるバックグラウンド関数 のデプロイもサポートしています。
spring-cloud-function-adapter-gcp
を使用すると、関数をバックグラウンド関数としてデプロイすることもできます。
以下のセクションでは、Cloud Pub/Sub トピックの背景関数を作成するプロセスについて説明します。ただし、ここでは説明されていない、バックグラウンド関数の実行をトリガーできるさまざまなイベント型がいくつかあります。これらはバックグラウンド関数がドキュメントをトリガーします で説明されています。
GCP のスタートガイド
GCF バックグラウンド関数として実行される単純な Spring Cloud Function から始めましょう。
@SpringBootApplication
public class BackgroundFunctionMain {
public static void main(String[] args) {
SpringApplication.run(BackgroundFunctionMain.class, args);
}
@Bean
public Consumer<PubSubMessage> pubSubFunction() {
return message -> System.out.println("The Pub/Sub message data: " + message.getData());
}
}
さらに、以下の定義でプロジェクトに PubSubMessage
クラスを作成します。このクラスは、Pub/Sub トピックイベントで関数に渡される Pub/Sub イベント構造 を表します。
public class PubSubMessage {
private String data;
private Map<String, String> attributes;
private String messageId;
private String publishTime;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public Map<String, String> getAttributes() {
return attributes;
}
public void setAttributes(Map<String, String> attributes) {
this.attributes = attributes;
}
public String getMessageId() {
return messageId;
}
public void setMessageId(String messageId) {
this.messageId = messageId;
}
public String getPublishTime() {
return publishTime;
}
public void setPublishTime(String publishTime) {
this.publishTime = publishTime;
}
}
resources/META-INF/MANIFEST.MF
で構成のメインクラスを指定します。
Main-Class: com.example.BackgroundFunctionMain
次に、関数をローカルで実行します。これは、プロジェクトの依存関係セクションで説明されている Google Cloud Functions function-maven-plugin
によって提供されます。
mvn function:run
HTTP 関数を呼び出します。
curl localhost:8080 -H "Content-Type: application/json" -d '{"data":"hello"}'
ログを表示して、関数が呼び出されたことを確認します。
GCP にデプロイする
バックグラウンド関数を GCP にデプロイするには、最初にアプリケーションをパッケージ化します。
mvn package
上記で定義したカスタム spring-boot-maven-plugin
プラグインを追加した場合は、結果の JAR が target/deploy
ディレクトリに表示されるはずです。この JAR は、デプロイから Google Cloud Functions 用に正しくフォーマットされています。
次に、Cloud SDK CLI がインストールされていることを確認します。
プロジェクトのベースディレクトリから、次のコマンドを実行してデプロイします。
gcloud functions deploy function-sample-gcp-background \ --entry-point org.springframework.cloud.function.adapter.gcp.GcfJarLauncher \ --runtime java11 \ --trigger-topic my-functions-topic \ --source target/deploy \ --memory 512MB
Google クラウド関数は、--trigger-topic
で指定されたトピックにメッセージがパブリッシュされるたびに関数を呼び出すようになります。
バックグラウンド機能のテストと検証のウォークスルーについては、GCF バックグラウンド関数のサンプル [GitHub] (英語) を実行するための手順を参照してください。
サンプル関数
プロジェクトは、参照として次のサンプル関数を提供します。
function-sample-gcp-http [GitHub] (英語) は、ローカルでテストしてデプロイを試すことができる HTTP 関数です。
function-sample-gcp-background [GitHub] (英語) は、指定された Pub/Sub トピックに公開されているメッセージによってトリガーされるバックグラウンド関数の例を示しています。