Spring Cloud Function
バージョンアップ情報
Spring Cloud Function情報
- Spring Cloud Functionとは
- 主な機能
- 主な特徴
- 動作確認
- メリット・デメリット
- 類似プロダクト
- ユースケース
- 動作環境
- Spring Cloud Functionのライセンス
- 参考情報
- オープンソース年間サポートサービス
Spring Cloud Functionとは
Spring Cloud Function(スプリングクラウドファンクション)は、後述する「サーバーレス機能」を利用するアプリケーションを実装するための、Spring Boot ベースのフレームワークです。
このフレームワークは、ビジネスロジックを関数として実装し、異なるランタイムターゲット(AWS Lambda や Azure Functions など)にデプロイできるように設計されています。
アプリケーションは、開発時に Spring Boot 組み込みの Tomcatで 動作検証やテストを実施し、運用時にAWS Lambdaで動かすことができます。
サーバーレス機能とは
サーバーレス機能とは、アプリケーション開発者がサーバーのインフラストラクチャを管理することなく、コードを実行できるクラウドコンピューティングモデルのことです。
このモデルでは、クラウドプロバイダがサーバーの管理、スケーリング、パッチ適用などの運用業務を担当し、開発者はビジネスロジックに集中できます。
クラウドプロバイダが提供するこのようなサービスをサーバーレスコンピューティングサービスと言います。
サーバーレスコンピューティングサービスには、以下のような機能が含まれます。
- 自動スケーリング:トラフィックの増減に応じて、自動的にリソースをスケールアップまたはスケールダウンします。
- コスト効率:使用したリソース分だけ課金されるため、コスト効率が高いです。
- 迅速なデプロイ:新しい機能を迅速にデプロイし、すぐに利用可能です。
- 運用の簡略化:インフラストラクチャの管理が不要で、運用業務が簡略化されます。
大手クラウドプロバイダが提供するサーバーレスコンピューティングサービスには、AWS Lambda(Amazon)、Azure Functions(Microsoft)、Google Cloud Functions(Google)などがあります。
主な機能
Spring Cloud Functionの主な機能は、以下の通りです。
- 関数の実装: ビジネスロジックを関数として実装できます。
- プログラミングスタイルの選択: 反応的、命令的、またはハイブリッドのスタイルを選択できます。
- 関数の組み合わせ: 命令的な関数と反応的な関数を組み合わせることができます。
- 入出力の透明な型変換: 入力と出力の型変換が透明に行われます。
- HTTPエンドポイントのサポート: 関数をHTTPエンドポイントとして公開できます。
- ストリーミングデータのサポート: Apache Kafka、Solace、RabbitMQなどを通じて関数にストリーミングデータを渡すことができます。
主な特徴
- 簡潔なプログラミングモデル:Spring Bootの機能(自動構成、依存関係の注入、メトリクス)をサーバーレスプロバイダーで使用できます。
- インフラストラクチャの抽象化:開発者はビジネスロジックに集中でき、転送の詳細やインフラストラクチャを抽象化できます。
- 多様なプラットフォーム対応:AWS Lambda、Azure、Google Cloud Functionsなど、さまざまなサーバーレスプロバイダーに対応しています。
動作確認
Spring Cloud Functionのサンプルアプリケーションの動作をローカル(Spring Boot上)とGCP(Google Cloud Functions上)で確認してみます。
まずはサンプルアプリケーションをSpring Cloud FunctionのGitHubリポジトリからクローンし、起動します。
$ git clone git@github.com:spring-cloud/spring-cloud-function.git
$ cd spring-cloud-function/spring-cloud-function-samples/function-sample-gcp-http/
$ mvn function:run
このサンプルアプリケーションの実装は、以下のようになっています。見ての通り、受け取ったリクエストパラメーターを大文字にして返しているだけです。
package com.example;
import java.util.Locale;
import java.util.function.Function;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class CloudFunctionMain {
public static void main(String[] args) {
SpringApplication.run(CloudFunctionMain.class, args);
}
@Bean
public Function<String, String> function() {
return value -> value.toUpperCase(Locale.ROOT);
}
}
起動すると、Spring Bootアプリケーションであることが分かります。
・・・(省略)・・・
INFO: Initializing: class com.example.CloudFunctionMain
. ____ _ __ _ _
/¥¥ / ___'_ __ _ _(_)_ __ __ _ ¥ ¥ ¥ ¥
( ( )¥___ | '_ | '_| | '_ ¥/ _` | ¥ ¥ ¥ ¥
¥¥/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_¥__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.4.0-SNAPSHOT)
・・・(省略)・・・
INFO: URL: http://localhost:8080/
以下のcurlコマンドで「hello」というパラメーターを含むPOSTリクエストを送信します。
$ curl http://localhost:8080/ -d "hello"
"HELLO"
大文字の「HELLO」が返ってきます。
今度はGCP上でこれを動かします。
以下のコマンドでアプリケーションをjarファイルにパッケージングします。
$ mvn package
target/deployディレクトリにGCP上で実行可能なjarファイルが出力されます。
このjarファイルには組み込みTomcatは含まれないので、`java -jar ・・・`では起動しません
Cloud SDK CLIがインストールされていることを確認して、プロジェクトルートから次のコマンドを実行してデプロイします。
$ gcloud functions deploy function-sample-gcp-http ¥
--entry-point org.springframework.cloud.function.adapter.gcp.GcfJarLauncher ¥
--runtime java17 ¥
--trigger-http ¥
--source target/deploy ¥
--memory 512MB
Invoke the HTTP function:
コマンドの実行が成功したら、再度curlコマンドで「hello」というパラメーターを含むPOSTリクエストを送信します。
$ curl https://REGION-PROJECT_ID.cloudfunctions.net/function-sample-gcp-http -d "hello"
"HELLO"
ローカルと同様にGCPでサンプルアプリケーションが機能しました。
メリット・デメリット
メリット・必要性
Spring Cloud Functionを導入することで以下のような恩恵が得られます。
- 開発効率の向上:ビジネスロジックを関数として実装することで、開発プロセスが効率化されます。
- 柔軟性:異なるプラットフォームで同じコードを実行できるため、柔軟性が高いです。
- メンテナンス性の向上:関数ごとにテストやデプロイが可能で、メンテナンスが容易になります。
デメリット・注意点・課題
Spring Cloud Functionを導入する上でのデメリットや注意点は、以下のようなことが挙げられます。
- 複雑な設定:初期設定や構成が複雑になることがあります。
- 運用コスト:サーバーレスプラットフォームを使用するため、運用コストが増加する可能性があります。
類似プロダクト
サーバーレス機能を実現するOSSとしては、OpenFaaSやApache OpenWhiskなどが挙げられます。
ユースケース
以下のような活用例が考えられます。
- リアルタイムデータ処理:ストリーミングデータをリアルタイムで処理する場合。
- イベント駆動アプリケーション:イベントが発生したときに関数を実行する場合。
- バッチ処理:定期的に実行するバッチ処理を関数として実装する場合。
動作環境
Spring Cloud Functionは、ローカル環境やクラウド環境(AWS Lambda、Azure Functions、Google Cloud Functionsなど)で動作します。
Spring Cloud Functionのライセンス
Spring Cloud Functionは、Springの他のプロジェクトと同様に、Apache 2.0ライセンスの下で提供されています。
ユーザーはそのソフトウェアの使用や頒布、修正、派生版の頒布をすることに制限を受けません。
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象
Spring Boot
スプリング ブート。Springフレームワークのアプリケーションを簡単に開発できるオープンソースのJavaフレームワークです。
-
サポート対象
Spring Framework
スプリングフレームワーク。Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。