このページを編集

Azure Functions with Quarkus REST, Undertow, or Reactive Routes

preview

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の項目 を参照してください。

Only text based media types are supported at the moment as Azure Functions HTTP Trigger for Java does not support a binary format

前提条件

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

ソリューション

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

Maven/Gradleプロジェクトの作成

まず、新しいプロジェクトが必要です。以下のコマンドで新規プロジェクトを作成します。

コマンドラインインタフェース
quarkus create app org.acme:azure-functions-http-quickstart \
    --extension='quarkus-azure-functions-http'
cd azure-functions-http-quickstart

Gradleプロジェクトを作成するには、 --gradle または --gradle-kotlin-dsl オプションを追加します。

Quarkus CLIのインストールと使用方法の詳細については、 Quarkus CLI ガイドを参照してください。

Maven
mvn io.quarkus.platform:quarkus-maven-plugin:3.38.3:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=azure-functions-http-quickstart \
    -Dextensions='quarkus-azure-functions-http'
cd azure-functions-http-quickstart

Gradleプロジェクトを作成するには、 -DbuildTool=gradle または -DbuildTool=gradle-kotlin-dsl オプションを追加します。

Windowsユーザーの場合:

  • cmdを使用する場合、(バックスラッシュ \ を使用せず、すべてを同じ行に書かないでください)。

  • Powershellを使用する場合は、 -D パラメータを二重引用符で囲んでください。例: "-DprojectArtifactId=azure-functions-http-quickstart"

このコマンドは、Quarkus Azure Functions HTTP エクステンションをインポートするプロジェクト構造を生成します。サンプルが含まれています。

プロジェクトの確認

生成されたプロジェクトの 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 のスイッチによって処理されます。

Quarkus dev mode

Quarkus 開発モードは、アプリケーションを HTTP エンドポイントとして実行するだけで機能します。開発モードでは、Azure Functions ローカルランタイムとの特別なやり取りはありません。

CLI
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

Azure Functionsローカル環境での実行

ローカルの Azure Functions 環境でこのサンプルを試したい場合は、次のコマンドを使用できます。

CLI
quarkus run
Maven
./mvnw quarkus:run
Gradle
./gradlew --console=plain --info --no-daemon quarkusRun

Gradle はプロセス管理に少しクセがあるため、--no-daemon スイッチが必要です。そうしないと、 control-c でプロセスが正常に破棄されず、ポートが開いたままになることがあります。

この機能を利用するには、 Azure Functions Core Tools がインストールされている必要があります。

例題にアクセスするためのURLは次のようになります:

Quarkus統合テスト

@QuarkusIntegrationTest の機能を使用して統合テストを実装できます。これらの統合テストが実行されると、 統合テストの間、ローカルの Azure Functions 環境がスピンアップされます。

Maven
./mvnw verify
Gradle
./gradlew --info quarkusIntTest

Maven で実行する統合テストが *IT.java ファイルパターンを使用していることを確認してください。そうすれば、通常のビルドでテストが実行されることはありません。

Gradle で実行する統合テストが src/integrationTest/java 内にあることを確認してください。src/test に存在する統合テスト は通常のビルドで実行され、失敗します。

Azureへのログイン

アプリケーションを Azure にデプロイするには、Azure にログインしてください:

az login

Azureへのデプロイ

quarkus-azure-functions-http エクステンションは Azure へのデプロイ作業をすべて処理します。デフォルトでは、Quarkus はバックグラウンドで Azure CLI を使用して認証し、Azure へのデプロイを行います。アカウントに複数のサブスクリプションが関連付けられている場合、使用するサブスクリプションを指定するために、application.properties ファイルに quarkus.azure-functions.subscription-id プロパティーを設定する必要があります。その他の認証メカニズムやデプロイオプションについては、Azure Functions 設定リファレンス を参照してください。

アプリケーションをデプロイするには、プロジェクトをビルドした後、次のコマンドを実行します:

Maven
./mvnw quarkus:deploy
Gradle
./gradlew --info deploy

Gradle の場合、この出力を表示するには --info スイッチを使用する必要があります。

デプロイが成功すると、Quarkus は、サンプル関数のエンドポイント URL をコンソールに出力します:

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

サービスにアクセスするための URL は次のようになります: https://{appName}.azurewebsites.net/api/hello.

Azure Functions 設定リファレンス

ビルド時に固定される設定プロパティ - 他のすべての設定プロパティは、実行時にオーバーライド可能

Configuration property

タイプ

デフォルト

App name for azure function project. This is required setting. Defaults to the base artifact name

Environment variable: QUARKUS_AZURE_FUNCTIONS_APP_NAME

Show more

string

Azure Resource Group for your Azure Functions

Environment variable: QUARKUS_AZURE_FUNCTIONS_RESOURCE_GROUP

Show more

string

quarkus

Specifies the region where your Azure Functions will be hosted; default value is westus. Valid values

Environment variable: QUARKUS_AZURE_FUNCTIONS_REGION

Show more

string

westus

Specifies whether to disable application insights for your function app

Environment variable: QUARKUS_AZURE_FUNCTIONS_DISABLE_APP_INSIGHTS

Show more

boolean

false

Specifies the instrumentation key of application insights which will bind to your function app

Environment variable: QUARKUS_AZURE_FUNCTIONS_APP_INSIGHTS_KEY

Show more

string

Valid values are linux, windows, and docker

Environment variable: QUARKUS_AZURE_FUNCTIONS_RUNTIME_OS

Show more

string

linux

Should be set to at least the minimum Quarkus compatible version

Environment variable: QUARKUS_AZURE_FUNCTIONS_RUNTIME_JAVA_VERSION

Show more

string

17

URL of docker image if deploying via docker

Environment variable: QUARKUS_AZURE_FUNCTIONS_RUNTIME_IMAGE

Show more

string

If using docker, url of registry

Environment variable: QUARKUS_AZURE_FUNCTIONS_RUNTIME_REGISTRY_URL

Show more

string

Description of each type can be found here Valid values are

  • azure_cli Delegates to Azure CLI for login

  • managed_identity Requires client to be set

  • oauth2 Requires tenant to be set

  • device_code Requires tenant to be set

  • file Filesystem path to a property file that defines authentication. Properties supported are

    • type Supports same type values as well as service_principal

    • client

    • tenant

    • key Password for service_principal if using password authentication

    • certificate Path to PEM file if using service_principal

    • certificate-password Password for PEM file if it is password protected and if using service_principal

    • environment if using service_principal

Defaults to "azure_cli" for authentication

Environment variable: QUARKUS_AZURE_FUNCTIONS_AUTH_TYPE

Show more

string

azure_cli

Filesystem path to properties file if using file type

Environment variable: QUARKUS_AZURE_FUNCTIONS_AUTH_PATH

Show more

string

Client or App Id required if using managed_identity type

Environment variable: QUARKUS_AZURE_FUNCTIONS_AUTH_CLIENT

Show more

string

Tenant ID required if using oauth2 or device_code type

Environment variable: QUARKUS_AZURE_FUNCTIONS_AUTH_TENANT

Show more

string

Specifies the name of the existing App Service Plan when you do not want to create a new one.

Environment variable: QUARKUS_AZURE_FUNCTIONS_APP_SERVICE_PLAN_NAME

Show more

string

java-functions-app-service-plan

The app service plan resource group.

Environment variable: QUARKUS_AZURE_FUNCTIONS_APP_SERVICE_PLAN_RESOURCE_GROUP

Show more

string

Azure subscription id. Required only if there are more than one subscription in your account

Environment variable: QUARKUS_AZURE_FUNCTIONS_SUBSCRIPTION_ID

Show more

string

The pricing tier.

Environment variable: QUARKUS_AZURE_FUNCTIONS_PRICING_TIER

Show more

string

Port to run azure function in local runtime. Will default to quarkus.http.test-port or 8081

Environment variable: QUARKUS_AZURE_FUNCTIONS_FUNC_PORT

Show more

int

Config String for local debug

Environment variable: QUARKUS_AZURE_FUNCTIONS_LOCAL_DEBUG_CONFIG

Show more

string

transport=dt_socket,server=y,suspend=n,address=5005

関連コンテンツ