The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

cloudwatch

Tagged posts: 'cloudwatch'

AWS CloudWatch用のQuarkusエクステンションの作成 最近、QuarkusのアプリケーションログをAWS CloudWatchにロギングしたいという状況になりました。基本的には時間がかかりますが、大したことではありません。CloudWatchの依存関係を追加し、Log Handlerを作成し、提供されているAWS CloudWatch APIを介してCloudWatchにログをプッシュします。しかし、それを他の人と共有したい場合はどうでしょうか?もちろん、プロジェクトの一部としてGitHubに置いて、他の人がコピー&ペーストできるようにすることもできますが、それはコードを他の人と共有する最もエレガントな方法ではありません。 そのため、私たちはQuarkusのエクステンションを実装しました。これにより、他のユーザーがより簡単にQuarkusを使用できるようになり、車輪の再発明やコピーペーストの必要がなくなりました。どうすればいいのでしょうか?ここで、Quarkiverse Hubの出番です。Quarkiverseは、開発者が自分の拡張機能をホストして他の人と共有できるGitHubの組織です。エクステンションをQuarkiverseでホスティングすることで、従来のように自分ですべての作業を行うのではなく、無料でいくつかのメリットを得ることができます。Quarkiverseを使用すると、アーティファクトをビルドし、Sonatype Nexus Manager(または類似のもの)でリリースし、Maven Centralや他のリポジトリで配布する必要がありません。Quarkiverseにはこれらがすべて付属しているので、エクステンションの実装自体に集中することができます。以下の投稿では、CloudWatch Quarkusエクステンションを初期化、実装、共有するために必要なことを説明します。 Quarkiverseを使用してエクステンションをハブで公開し(これは私たちが推奨する方法です)、それによって得られるすべての利点を利用したい場合は、単にquarkusio/quarkusのGitHub組織で新しいエクステンション提案の課題をオープンする必要があります。こうすることで、テンプレートが生成され、あなたはエクステンションのコードを実装するだけなので、ほとんどの要件はすでに満たされていることになります。既存のプロジェクトをテンプレートとして使用する場合は、いくつかの要件に注意する必要があります。エクステンションのリリースやドキュメントの公開を自動化するために、Quarkiverseの組織下にあるプロジェクトには従わなければならないルールがあります。 エクステンションのリポジトリはquarkus-<project>という名前でなければなりません。 Quarkiverseの拡張機能は、io.quarkiverse.<project>のgroupIdに属さ *なければなりませ*ん。 ルートpom.xmlはio.quarkiverse:quarkiverse-parentを継承し なければなりません。 Quarkiverseの拡張機能には、以下のフォルダとファイルが含まれます。 deployment runtime integration-test docs pom.xml LICENSE README この記事では、runtimeとdeploymentの中身のみを取り上げます。その他の中身は、オプションであったり、すでにプロジェクトテンプレートによって生成されていたり、あるいは重要であっても、Quarkusのエクステンションがどのように作成されるかを知りたい場合には、最も重要で実用的なものではありません。まず、導入セクションから始めましょう。ここには、Quarkusエクステンションの初期化に必要なクラスが含まれています。この初期化クラスがないと、Quarkusアプリケーションの起動時にエクステンションが識別されません。 class LoggingCloudwatchProcessor { @BuildStep FeatureBuildItem feature() { return new FeatureBuildItem("logging-cloudwatch"); } @BuildStep @Record(ExecutionTime.RUNTIME_INIT) LogHandlerBuildItem addCloudwatchLogHandler(final LoggingCloudWatchConfig config, final LoggingCloudWatchHandlerValueFactory cloudWatchHandlerValueFactory) { return new LogHandlerBuildItem(cloudWatchHandlerValueFactory.create(config)); } } 上のスニペットでは、 _@BuildStep_でアノテーションされ、新しいFeatureBuildItemを返す _feature()_メソッドを見ることができます。このメソッドは、アプリケーションの起動時にログに表示される機能の名前(logging-cloudwatch)を公開します。2 番目のメソッド _addCloudWatchHandler()_は、LoggingCloudWatchConfig と LoggingCloudWatchHandlerValueFactory クラスによって提供されるエクステンションのランタイム構成を初期化します。幸い、LogHandlerBuildItemが提供されているので、独自の実装を追加して既存のログハンドラを上書きすることができます。他にもたくさんのBuildItemが提供されているので、独自のエクステンションを作りたい方はぜひ参考にしてみてください。このメソッドのパラメータは、以下のスニペットで説明されるコンフィグクラスです。 @ConfigRoot(phase = ConfigPhase.RUN_TIME, name = "log.cloudwatch") public class LoggingCloudWatchConfig { @ConfigItem(defaultValue = "true")...