BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Nimbus: Javaサーバレスアプリケーション開発のための新たなフレームワーク

Nimbus: Javaサーバレスアプリケーション開発のための新たなフレームワーク

原文(投稿日:2019/04/23)へのリンク

Nimbusフレームワークは、クラウドでのファンクション・アズ・ア・サービス(FaaS)アプリケーションの開発、テスト、デプロイを容易にすることを目的としたJavaフレームワークである。クラウドプロバイダのサーバーレス機能とのインタラクションのための、クラウドに依存しない共通インターフェースを提供する。

先日のMediumの記事では、このフレームワークの作者であるThomas Allerton氏が、"データ保存のためのたかだか数個のエンドポイントの配置に、クラウド用語を学ばなければならないというのは、シンプルなアプリケーションを作りたいと考える新参者には、非常に急勾配の学習曲線が存在することになります"、と述べている。クラウドのコンフィギュレーション構文やFaaSのAPIを学ぶ代わりに、Nimbusは、アノテーションを使って、関数ベースのアプリケーション構築時に使用される共通的なバックエンド操作をサポートする。

Allerton氏はNimbusの大きなメリットとして、クラウドリソース(AWS SAMServerlessフレームワークなど)を宣言するために、設定ファイルを作成する必要がないことを挙げている。つまり開発者は、"パラメータを忘れるという間違いを犯しがち"なのだ。さらにNimbusでは、可能な限り早期にミスを検出することを目的として、コンパイル時にデプロイパラメータのチェックを行っている。

フレームワークの使用方法をよりよく理解するために、 次の例を見てほしい。ここでは@HTTP ServerlessFunctionアノテーションを使用して、非常に単純なREST APIを作成している。

public class RestApi {

    @HttpServerlessFunction(path="getOsTypes", method= HttpMethod.GET)
    public List<String> currentOsTypes() {
           return Arrays.asList(new String[] {"Windows", "Mac", "Linux"});
    }
}

他の操作もサポートしている。

  • WebSocket関数による、WebSocket要求の処理
  • Document Store関数による、ドキュメントストア更新をトリガとするコード実行
  • Key-Value Store関数による、キーバリューストア更新をトリガとするコード実行
  • Notification関数による、通知をトリガとするコード実行
  • Queue関数による、キューへの追加をトリガとするコード実行
  • トリガを必要としないコードを実行するBasic関数
  • ファイルストレージのイベント(作成あるいは削除)に基づいてコードを実行するFile Store関数
  • デプロイ直後にワンタイムオペレーションを実行するAfter Deployment関数

さまざまな操作のサポートに加えて、Nimbusは、サーバーレスアプリケーションが何らかの永続性を必要とする場合のために、いくつかの種類のデータストアもサポートする。次の例は、 @DocumentStoreアノテーションを使用して、ドキュメントストアを設定する方法を示している。

@DocumentStore
public class OsPreference {

    @Key
    private String id;

    @Attribute
    private String preference;

    public OsPreference(String id, String preference) {
           this.id = id;
           this.preference = preference;
    }
    
    // ...
    // getters & setters
    // ...
}

ドキュメントストアを設定することで、DocumentStoreClientを使用したデータの永続化が可能になる。

private DocumentStoreClient<OsPreference> client =
   ClientBuilder.getDocumentStoreClient(OsPreference.class);

@HttpServerlessFunction(path="setOsPreference", method= HttpMethod.POST)
@UsesDocumentStore(OsPreference.class)
public String setOsPreference(OsPreference osPreference) {
   client.put(osPreference);
   return "Success";
}

その他のデータストア(とクライアント)のサポートとしては、リレーショナルデータを格納するリレーショナルストアキーバリューストアにデータを格納するキーバリューストア、オブジェクトストレージ(静的Webサイトのホスティングとファイルのアップロードを明示的にサポート)用のファイルストアなどがある。

サーバーレスアプリケーションを構築する上で、もうひとつの共通的な課題はテストである。Nimbusは、ユニットテストと統合テストの両方を明示的にサポートしている。単体テストのサポートでは、これまでに挙げた操作のローカルモック展開を作成する機能が追加されている。これにより、要求を受け入れて、関数が正しく呼び出されたこと、あるいはデータが適切に格納されたことが確認できる。統合テストのサポートは単体テストよりも多少制限があり、HTTPベースのテストのみがサポートされている。これらのテストではローカルWebサーバを起動することが可能で、要求が期待された機能を呼び出すことの確認に使用することができる。

現時点では、初期リリースの一部としてAWSのみがサポートされているが、他のクラウドプロバイダもサポートされる予定である。

Nimbusについて詳しく知るには、まずGetting Startedガイドを読んだ上で、 リファレンス資料を見るか、あるいはGitHubでソースをクローンしてほしい。

この記事に星をつける

おすすめ度
スタイル

BT