Quarkus REST、Undertow、または Reactive Routes を使用した Azure Functions
quarkus-azure-functions-http
エクステンションを使用すると、Quarkus REST (Jakarta REST 実装) を使用してマイクロサービスを作成できます。
Undertow (servlet)、Reactive Routes、または Funqy HTTP を使用して、これらのマイクロサービスを Azure Functions ランタイムにデプロイできるようにします。
言い換えれば、このエクステンションは Azure Functions HttpTrigger と HTTP API の Quarkus ファミリーのブリッジとして機能します。
1 つの Azure 関数のデプロイメントは、任意の数の Jakarta REST、サーブレット、Reactive Routes、または Funqy HTTP のエンドポイントを表現できます。
この技術は、previewと考えられています。 preview では、下位互換性やエコシステムでの存在は保証されていません。具体的な改善には設定や API の変更が必要になるかもしれませんが、 stable になるための計画は現在進行中です。フィードバックは メーリングリスト や GitHub の課題管理 で受け付けています。 とりうるステータスの完全なリストについては、 FAQの項目 を参照してください。 |
Azure Functions HTTP Trigger for Javaがバイナリ形式をサポートしていないため、現時点ではテキストベースのメディアタイプのみがサポートされています |
要件
このガイドを完成させるには、以下が必要です:
-
約15分
-
IDE
-
JDK 17+がインストールされ、
JAVA_HOME
が適切に設定されていること -
Apache Maven 3.9.9
-
使用したい場合は、 Quarkus CLI
-
ネイティブ実行可能ファイルをビルドしたい場合、MandrelまたはGraalVM(あるいはネイティブなコンテナビルドを使用する場合はDocker)をインストールし、 適切に設定していること
-
Azureのアカウント 無料アカウントでも大丈夫です。
-
Azure Functions Core Tools バージョン4.x
ソリューション
このガイドでは、Quarkus REST エンドポイントを Azure Functions にデプロイできる maven プロジェクトの実行について説明します。 その例として Jakarta REST が示されていますが、これは簡単に任意の HTTPフレームワークに置き換えることができます。
Maven/Gradleプロジェクトの作成
ここ にある Quarkus オンラインアプリケーションジェネレーターから、サンプルコードを生成できます。
この例は、Quarkus CLIで生成することもできます:
quarkus create app --extension=quarkus-azure-functions-http
gradleプロジェクトを生成したい場合は、 --gradle
スイッチを追加します。
Quarkus dev mode
Quarkus 開発モードは、アプリケーションを HTTP エンドポイントとして実行するだけで使用できます。開発モードでは、 Azure Functions ローカルランタイムとの特別なやり取りはありません。
./mvnw clean package quarkus:dev
プロジェクトの確認
生成されたプロジェクトの pom.xml
または build.gradle
ビルドファイルを開くと、
このプロジェクトは他の Quarkus プロジェクトと同様であることがわかります。
quarkus-azure-functions-http
エクステンションは、
Quarkus と Azure Functions のインテグレーションポイントです。
quarkus-azure-functions-http
エクステンションの現在の実装では、azure-functions-maven-plugin
や Gradle の同等の
プラグインが不要になりました。ローカル開発や Azure Functions のパッケージングおよびデプロイメントは、
すべて Quarkus によって行われます。
ビルド設定はすべて application.properties
内にあります。唯一必要な設定スイッチ
は quarkus.azure-functions.app-name
です。
Azureデプロイメントディスクリプタ
Azure Functions の`host.json`デプロイメント記述子は自動的に 生成されますが、オーバーライドする必要がある場合は、プロジェクトの root ディレクトリーで宣言し、 準備ができたらビルドを再実行します。
ルートパスの設定
Azure Functionのデフォルトのルートプレフィックスは、/api
です。Jakarta REST、Servlet、Reactive Routes、Funqy HTTP のすべてのエンドポイントでは、これを明示的に考慮する必要があります。生成されたプロジェクトでは、application.properties
内の quarkus.http.root-path
のスイッチによって処理されます。
Azure Functionsローカル環境での実行
ローカルの Azure Functions 環境でこのサンプルを試したい場合は、次のコマンドを 使用できます。
./mvnw quarkus:run
または
./gradlew --info --no-daemon quarkusRun
Gradle はプロセス管理に少しクセがあるため、--no-daemon
スイッチが必要です。そうしないと、
control-c でプロセスが正常に破棄されず、ポートが開いたままになることがあります。
なお、これを実行するためには、 Azure Functions Core Tools が インストールされている必要があります!
例題にアクセスするためのURLは次のようになります:
Quarkus統合テスト
@QuarkusIntegrationTest
の機能を使用して統合テストを実装できます。これらの統合テストが実行されると、
統合テストの間、ローカルの Azure Functions 環境がスピンアップされます。
Mavenの場合:
./mvnw -DskipITs=false verify
maven で実行する統合テストが *IT.java
ファイルパターンを使用しているようにし、通常のビルドでテストが
実行されないようにします。
Gradleの場合:
./gradlew --info quarkusIntTest
Gradle で実行する統合テストが src/integrationTest/java
内にあることを確認してください。src/test
に存在する統合テスト
は通常のビルドで実行され、失敗します。
Azureへのデプロイ
quarkus-azure-functions-http
エクステンションは Azure へのデプロイ作業をすべて処理します。デフォルトでは、
Quarkus はバックグラウンドで Azure CLI を使用して認証し、Azure へのデプロイを行います。
アカウントに複数のサブスクリプションが関連付けられている場合、使用するサブスクリプションを指定するために、
application.properties
ファイルに quarkus.azure-functions.subscription-id
プロパティーを設定する必要があります。
その他の認証メカニズムやデプロイオプションについては、こちら から設定プロパティーを参照してください。
デプロイを実行するには、プロジェクトをビルドした後、次のコマンドを実行してください:
./mvnw quarkus:deploy
または
./gradlew --info deploy
デプロイメントが成功すると、Quarkus はサンプル関数のエンドポイント URL をコンソールに出力します。
Gradle の場合、この出力を表示するには --info
スイッチを使用する必要があります。
例えば
[INFO] HTTP Trigger Urls:
[INFO] HttpExample : https://{appName}.azurewebsites.net/api/{*path}
サービスにアクセスするための URL は次のようになります。