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

RESTEasy Reactive、Undertow、または Reactive Routes を使用した Azure Functions

The quarkus-azure-functions-http extension allows you to write microservices with RESTEasy Reactive (our Jakarta REST implementation), Undertow (servlet), Reactive Routes, or Funqy HTTP and make these microservices deployable to the Azure Functions runtime. In other words, this extension is a bridge from the Azure Functions HttpTrigger and the Quarkus family of HTTP APIs. One azure function deployment can represent any number of Jakarta REST, servlet, Reactive Routes, or Funqy HTTP endpoints.

この技術は、previewと考えられています。

preview では、下位互換性やエコシステムでの存在は保証されていません。具体的な改善には設定や API の変更が必要になるかもしれませんが、 stable になるための計画は現在進行中です。フィードバックは メーリングリストGitHub の課題管理 で受け付けています。

とりうるステータスの完全なリストについては、 FAQの項目 を参照してください。

Azure Functions HTTP Trigger for Javaがバイナリ形式をサポートしていないため、現時点ではテキストベースのメディアタイプのみがサポートされています

前提条件

このガイドを完成させるには、以下が必要です:

ソリューション

このガイドでは、RESTEasy ReactiveエンドポイントをAzure Functionsにデプロイすることができるmavenプロジェクトの実行を説明します。例としてJakarta RESTのみが提供されていますが、お好みのHTTPフレームワークで簡単に置き換えることができます。

Creating the Maven/Gradle Project

You can generate the example code from Quarkus’s online application generator at this link.

この例は、Quarkus CLIで生成することもできます:

quarkus create app --extension=quarkus-azure-functions-http

Add the --gradle switch if you want to generate a gradle project.

Azureへのログイン

Azureにログインしないとデプロイできません。

az login

Quarkus dev mode

Quarkus dev mode works by just running your application as a HTTP endpoint. In dev mode there is no special interaction with the Azure Functions local runtime.

./mvnw clean package quarkus:dev

Examining the project

If you open the pom.xml or build.gradle build file of the generated project you’ll see that the project is similar to any other Quarkus project. The quarkus-azure-functions-http extension is the integration point between Quarkus and Azure Functions.

The current implementation of the quarkus-azure-functions-http extension no longer requires the azure-functions-maven-plugin or gradle equivalent. Local development and Azure Functions packaging and deployment is now all done by Quarkus.

Build configuration is now all within application.properties. The only required configuration switch is quarkus.azure-functions.app-name.

Azureデプロイメントディスクリプタ

The Azure Functions host.json deployment descriptor is automatically generated, but if you need to override it, declare it in the root directory of the project and rerun the build when you are ready.

ルートパスの設定

Azure Functionのデフォルトのルートプレフィックスは、 /api です。Jakarta REST、Servlet、Reactive Routes、Funqy HTTP のすべてのエンドポイントでは、これを明示的に考慮する必要があります。生成されたプロジェクトでは、 application.properties 内の quarkus.http.root-path のスイッチによって処理されます。

Azureへのログイン

Azureにログインしないとデプロイできません。

az login

Quarkus dev mode

Quarkusの開発モードは、現在Azure Functionsでは動作しません。

Run locally in Azure Functions local environment

If you want to try this example within the local Azure Functions environment, you can use this command

./mvnw quarkus:run

or

./gradlew --info --no-daemon quarkusRun

Gradle is a bit quirky with process management, so you need the --no-daemon switch or control-c will not destroy the process cleanly and you’ll have open ports.

なお、これを実行するためには、 Azure Functions Core Tools がインストールされている必要があります!

The URL to access the example would be:

Quarkus Integration Testing

You can implement integration tests using @QuarkusIntegrationTest functionality. When these integration tests run, the local Azure Functions environment will be spun up for the duration of integration testing.

For maven:

./mvnw -DskipITs=false verify

Make sure any integration tests you execute with maven use the *IT.java file pattern so that regular builds do not execute the test.

For Gradle:

./gradlew --info quarkusIntTest

Make sure any integration tests you execute with Gradle are located within src/integrationTest/java. Integration tests that exist in src/test will run with normal build and fail.

Azureへのデプロイ

The quarkus-azure-functions-http extension handles all the work to deploy to Azure. By default, Quarkus will use the Azure CLI in the background to authenticate and deploy to Azure. If you have multiple subscriptions associated with your account, you must set the quarkus.azure-functions.subscription-id property in your application.properties file to the subscription you want to use. For other authentication mechanisms and deployment options see our config properties here.

To run the deploy, after you build your project execute:

./mvnw quarkus:deploy

or

./gradlew --info deploy

If deployment is a success, Quarkus will output the endpoint URL of the example function to the console For Gradle, you must use the --info switch to see this output!

例えば

[INFO] HTTP Trigger Urls:
[INFO] 	 HttpExample : https://{appName}.azurewebsites.net/api/{*path}

The URL to access the service would be something like