先日のGoogle Cloud Nextカンファレンスで、Object Computing、Inc.(OCI)は、Micronaut 1.1のリリースを発表した。新モジュールのMicronaut AWSとMicronaut RabbitMQにより、クラウドネイティブなアプリケーションの開発サポートが強化されている。既存モジュールのMicronaut GCP、Micronaut gPRC、Micronaut GraphQLにも改善が加えられた。その他では、JDKのIntrospector
に代わる新しいBean Introspection API、Micronaut Testモジュール用の新たなテンプレートなどが目新しい。
これまではProject Particleという名称であったMicronautは、マイクロサービスベースによるクラウドネイティブなサーバレースアプリケーションをJavaやGroovy、Kotlinで記述可能な、JVMベースのフルスタックフレームワークである。Micronautは2018年3月に、OCIのプリンシパル・ソフトウェアエンジニアで、GrailとMicronautのプロダクトリーダを務めるGraeme Rocher氏によって紹介された後、同年5月にオープンソースとして公開されている。
発表によると、
Micronaut 1.1によって、テスト性に優れ、コンテナ化が簡単で、効率がよい、クラウド対応のアプリケーションを、簡単に構築することが可能になります。
MicronautはGoogle Cloud Runにも、Google App Engine Standard for Java 11にもデプロイできます。1.1では、 Google Stackdriver Traceもサポートしました。
ここからは、新機能のいくつかを説明しよう。
Micronaut Profiles
Micronautにはいくつかのプロファイルが組み込まれており、スケルトンや、現在まだ開発中ではあるが、Webあるいはコマンドラインアプリケーションのビルディングブロックとなるアプリケーションを生成することが可能である。個々のプロファイルはテンプレートと、プロファイル固有の追加コマンドで構成されている。例えばcreate-app
はservice
プロファイルを開始するためのもので、コントローラ(create-controller
)およびクライアント(create-client
)クラスを構築するためのコマンドを含む。これらのコマンドは、他のプロファイルでは使用できない場合もある。
Micronaut GCP
MicronautとGoogle Cloud Platform(GCP)を統合したMicronaut GCPは、GCP上でアプリケーションを実行するためのモジュールである。 Micronaut 1.0のリリースと同時に導入されたこのモジュールは、"アプリケーションからレイテンシ情報を収集して、Google Cloud Platform Consoleに表示する"分散トレースシステムである、Stackdriver Traceをサポートするように拡張された。
Micronaut GCPは、GCPプロジェクトのIDの設定と取得を行うコンフィギュレーションクラスのGoogleCloudConfiguration
、GoogleCredentials
クラスのインスタンス生成を容易にするGoogleCredentialsConfiguration
などのユーティリティを提供する。
Stackdriver Traceは次のGradle、あるいはMaven依存関係で有効にすることができる。
compile 'io.micronaut.gcp:micronaut-gcp-tracing:1.0.0'
<dependency>
<groupId>io.micronaut.gcp</groupId>
<artifactId>micronaut-gcp-tracing</artifactId>
<version>1.0.0</version>
</dependency>
実行にはGCPのアカウントと、Google Cloud SDKのインストールが必要である。
先日のGoogle Cloud NextカンファレンスでのMicronaut 1.1の発表に合わせて、OCIでCore Grails開発チームの主任ソフトウェアエンジニアを務めるパートナのJeff Scott Brown氏は、"Microservices on GCP Dramatically Simplified"と題して講演し、GCPを使ったマイクロサービスの開発とデプロイのデモンストレーションを行った。
Micronaut AWS
MicronautとAmazon Web Services(AWS)を統合したMicronaut AWSは、MicronautアプリケーションにAWS Lambdaサーバーレスコンピューティングを提供する新しいモジュールである。Alexa SkillsやAWS API Gatewayもサポートされている。後者はMicronaut AWSの代替手段として、AWS Serverless Java Containerを使用するGraalVMなど、独自のカスタムLambdaカスタムランタイムを開発者が実装できるようにするものだ。MicronautLambdaRuntime
クラスが、カスタムLambdaランタイムへのエントリポイントを提供する。
Micronaut AWSでは、基本的なAWS SDK設定クラスであるAWSClientConfiguration
、以下のようなAWS固有の環境変数を取得するクラスのEnvironmentAWSCredentialsProvider
などのユーティリティも提供されている。
$ export AWS_ACCESS_KEY_ID=XXXX
$ export AWS_SECRET_KEY=YYYY
上記の環境変数とEnvironmentAWSCredentialsProvider
クラスを使用して、AWS S3クライアントを次のように確立することができる。
AmazonS3ClientBuilder amazonS3ClientBuilder = AmazonS3ClientBuilder.standard();
amazonS3ClientBuilder.setCredentials(new EnvironmentAWSCredentialsProvider(applicationContext.getEnvironment()));
AmazonS3 s3 = amazonS3ClientBuilder.build();
Micronautのcreate-function
コマンドは、(create-app
と同じように)AWS Lambdaにデプロイ可能なプロジェクトを新たに構築する。
例として、次のMicronautコマンドを考える。
$ mn create-function org-redlich-aws-app
次図に示すように、これによってプロジェクトのルートディレクトリ、対応するパッケージ名を含むソースおよびテストディレクトリ構造、ファイル名(OrgRedlichAwsApp.java
、OrgRedlichAwsFunction.java
)に、パラメータ名org-redlich-aws-app
を使用した、新しいMicronautプロジェクトが作成される。対応するテストも同時に生成される。
Micronaut AWSを使用するためのGradleとMaven依存関係は、次のようになる。
compile 'io.micronaut:micronaut-function-aws'
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-function-aws</artifactId>
</dependency>
Micronaut RabbitMQ
MicronautとRabbitMQを統合したMicronaut RabbitMQは、Micronautアプリケーションでメッセージ駆動型マイクロサービスを可能にする新モジュールである。オープンソースのメッセージブローカであるRabbitMQは、複数のメッセージングプロトコルと監視機能をサポートし、企業内やクラウドにデプロイ可能である。アプリケーション内で生成および消費されるメッセージは、JavaコードからRabbitMQへのインターフェースを可能にするオープンソースライブラリである、RabbitMQ Javaクライアントライブラリを使用して処理される。
Micronaut RabbitMQを使用するためのGradleとMaven依存関係は、次のようになる。
compile 'io.micronaut.configuration:micronaut-rabbitmq'
<dependency>
<groupId>io.micronaut.configuration</groupId>
<artifactId>micronaut-rabbitmq</artifactId>
</dependency>
RabbitMQ機能を使用するMicronautアプリケーションは、次のコマンドで作成する。
$ mn create-app my-rabbitmq-app --features rabbitmq
Micronaut RabbitMQに含まれる新しいRabbitMQ固有プロファイルでは、create-rabbitmq-producer
とcreate-rabbitmq-listener
のコマンドが使用可能になる。メッセージサービスは、新しいプロファイルを使用して次のように作成することができる。
$ mn create-app my-rabbit-service --profile rabbitmq
$ mn create-rabbitmq-producer Message
$ mn create-rabbitmq-listener Message
上記のコマンドによって、次のようなMessageProducer.java
とMessageListener.java
が生成される。
package micronaut.rabbitmq;
import io.micronaut.configuration.rabbitmq.annotation.RabbitClient;
@RabbitClient
public interface MessageProducer {
}
package micronaut.rabbitmq;
import io.micronaut.configuration.rabbitmq.annotation.RabbitListener;
@RabbitListener
public class MessageListener {
}
OCIでは、入門資料(getting started)やRabbitMQを使用したイベント駆動型アプリケーションの開発、シングルページアプリケーションの開発など、さまざまなステップ・バイ・ステップのガイドを提供している。これらのガイドの大半には、Java、Kotlin、Groovyでの例が紹介されている。
リソース
- "Microservices on GCP Dramatically Simplified", Jeff Scott Brown