Azure Functions
quarkus-azure-functions
エクステンションは、Azure Functions と Quarkus の間のシンプルな結合ポイントです。 Azure Functions ランタイムと連動して Quarkus をブートストラップし、書いた Azure Functions クラスを CDI/Arc Bean に 変えることができます。
これにより、Quarkus で初期化されたサービスやコンポーネントを、関数クラスに直接注入することができます。 また、関数クラスをシングルトンにしたい場合は、関数クラスのライフサイクルをリクエストスコープ (デフォルト) からアプリケーションスコープに変更することも可能です。
import com.microsoft.azure.functions.ExecutionContext; import com.microsoft.azure.functions.HttpMethod; import com.microsoft.azure.functions.HttpRequestMessage; import com.microsoft.azure.functions.HttpResponseMessage; import com.microsoft.azure.functions.HttpStatus; import com.microsoft.azure.functions.annotation.AuthorizationLevel; import com.microsoft.azure.functions.annotation.FunctionName; import com.microsoft.azure.functions.annotation.HttpTrigger; import jakarta.inject.Inject; import java.util.Optional; public class Function { @Inject GreetingService service; @FunctionName("HttpExample") public HttpResponseMessage run( @HttpTrigger( name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request, final ExecutionContext context) { // Parse query parameter final String query = request.getQueryParameters().get("name"); final String name = request.getBody().orElse(query); if (name == null) { return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build(); } else { return request.createResponseBuilder(HttpStatus.OK).body(service.greeting(name)).build(); } } }
この技術は、previewと考えられています。 preview では、下位互換性やエコシステムでの存在は保証されていません。具体的な改善には設定や API の変更が必要になるかもしれませんが、 stable になるための計画は現在進行中です。フィードバックは メーリングリスト や GitHub の課題管理 で受け付けています。 とりうるステータスの完全なリストについては、 FAQの項目 を参照してください。 |
要件
このガイドを完成させるには、以下が必要です:
-
約15分
-
IDE
-
JDK 17+がインストールされ、
JAVA_HOME
が適切に設定されていること -
Apache Maven 3.9.11
-
使用したい場合は、 Quarkus CLI
-
ネイティブ実行可能ファイルをビルドしたい場合、MandrelまたはGraalVM(あるいはネイティブなコンテナビルドを使用する場合はDocker)をインストールし、 適切に設定していること
-
Azureのアカウント 無料アカウントでも大丈夫です。
-
Azure Functions Core Tools バージョン4.x
ソリューション
このガイドでは、Http Trigger Azure Function クラスをデプロイできる Maven プロジェクトの実行方法について説明します。 この関数クラスは、クライアントに返される挨拶メッセージを生成する CDI Bean サービス を注入します。
Maven/Gradleプロジェクトの作成
Quarkusのオンラインアプリケーションジェネレーターから、この リンク でサンプルコードを生成できます。
この例は、Quarkus CLIで生成することもできます:
quarkus create app --extension=quarkus-azure-functions
gradleプロジェクトを生成したい場合は、 --gradle
スイッチを追加します。
プロジェクトの確認
生成されたプロジェクトの pom.xml
または build.gradle
ビルドファイルを開くと、 このプロジェクトは他の Quarkus プロジェクトと同様であることがわかります。 quarkus-azure-functions
エクステンションは、 Quarkus と Azure Functions のインテグレーションポイントです。これにより、Azure Functions ランタイムにコールバックが登録され、Quarkus をブートストラップし、 Quarkus/Arc を関数クラスの関数ファクトリーとしてセットアップします。
quarkus-azure-functions
エクステンションの現在の実装では、もはや azure-functions-maven-plugin
や Gradle の同等の プラグインは必要ありません。ローカル開発や Azure Functions のパッケージングおよびデプロイメントは、 すべて Quarkus によって行われます。
ビルド設定はすべて application.properties
内にあります。唯一必要な設定スイッチ は quarkus.azure-functions.app-name
です。
Azureデプロイメントディスクリプタ
Azure Functions の`host.json`デプロイメント記述子は自動的に 生成されますが、オーバーライドする必要がある場合は、プロジェクトの root ディレクトリーで宣言し、 準備ができたらビルドを再実行します。
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
エクステンションは 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/httpexample
サービスにアクセスするためのURLは次のようになります。