トップ OSS紹介 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 Boot

    スプリング ブート。Springフレームワークのアプリケーションを簡単に開発できるオープンソースのJavaフレームワークです。

  • Spring Framework
    サポート対象

    Spring Framework

    スプリングフレームワーク。Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。

オープンソースに関するさまざまな課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。