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

RESTEasy、Undertow、またはVert.x Webを使用したAzure Functions (サーバーレス)

quarkus-azure-functions-http エクステンションは、RESTEasy(JAX-RS)、Undertow(サーブレット)、Reactive Routes、 Funqy HTTP でマイクロサービスを記述し、これらのマイクロサービスをAzure Functionsランタイムにデプロイ可能にします。

1つのazure function deploymentは、JAX-RS、サーブレット、Reactive Routes、 FunqyのHTTP エンドポイントをいくつでも表現できます。

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

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

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

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

前提条件

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

  • 約15分

  • IDE

  • JDK 11+ がインストールされ、 JAVA_HOME が適切に設定されていること

  • Apache Maven 3.8.6

  • 使用したい場合は、 Quarkus CLI

  • ネイティブ実行可能ファイルをビルドしたい場合、MandrelまたはGraalVM(あるいはネイティブなコンテナビルドを使用する場合はDocker)をインストールし、 適切に設定していること

  • Azureのアカウント 無料アカウントでも大丈夫です。

  • Azure CLIがインストールされていること

ソリューション

このガイドでは、JAX-RS API、Servlet API、Vert.x Web、または Funqy HTTP APIで記述された3つのHTTPエンドポイントを含むサンプルプロジェクトを生成するために、Maven Archetype のウォークスルーを行います。ビルド後、Azureにデプロイできるようになります。

Maven デプロイメントプロジェクトの作成

Maven Archetypeを使用して、Quarkusアプリケーション用の Azure mavenプロジェクトを作成します。

mvn archetype:generate \
    -DarchetypeGroupId=io.quarkus \
    -DarchetypeArtifactId=quarkus-azure-functions-http-archetype \
    -DarchetypeVersion=2.14.2.Final

このコマンドを実行すると、インタラクティブモードでmavenが実行され、いくつかのビルドプロパティーの入力を求められます:

  • groupId - この生成されたプロジェクトの maven グループ ID org.acme と入力します。

  • artifactId - この生成されたプロジェクトの maven artifactId を入力します。 quarkus-demo と入力します。

  • version - この生成されたプロジェクトのバージョン。

  • package - デフォルトは groupId

  • appName - 既定値を使用します。これは、Azure でのアプリケーション名です。 *.azurewebsites.net 以下の一意のサブドメイン名である必要があります。そうしないと、Azure へのデプロイに失敗します。

  • appRegion - デフォルトは westus です。お使いの azure リージョンに依存します。

  • function - デフォルトの quarkus を使用してください。あなたの azure 関数の名前。何でも構いません。

  • resourceGroup - デフォルト値を使用してください。どんな値でも構いません。

上記の値は、生成された pom.xml ファイルのプロパティーとして定義されています。

Azureへのログイン

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

az login

ビルドと Azure へのデプロイ

前のステップで生成した pom.xml は、 azure-functions-maven-plugin .maven install を実行すると、設定ファイルと azure-functions-maven-plugin によって必要とされるステージングディレクトリーが生成されます。実行方法は以下の通りです。

./mvnw clean install azure-functions:deploy

あなたがまだ Azure で Function を作成していない場合は、uber-jar をビルドしてパッケージ化し、Azure で Function を作成してデプロイします。

デプロイが成功した場合、azure プラグインは Function にアクセスするためのベース URL を教えてくれます。

例えば

Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net

サービスにアクセスするためのURLは次のようになります。

エクステンションのmaven依存関係

サンプルプロジェクトには、RESTEasy、Undertow、Reactive Routes、 FunqyのHTTP エクステンションが含まれています。これらの API のうち 1 つだけを使用する場合 (例: jax-rs のみ) は、それぞれ quarkus-resteasy , quarkus-undertow , quarkus-funqy-http ,および/または quarkus-reactive-routes の maven 依存関係を削除してください。

quarkus-azure-functions-http エクステンションを含める必要があります。これは、Azure Functions ランタイムとマイクロサービスを書いている HTTP フレームワークの間の一般的なブリッジです。

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

Azure Functions デプロイメントディスクリプタのテンプレート ( host.json , function.json ) は、 azure-config ディレクトリー内にあります。必要に応じて編集してください。準備ができたらビルドを再実行します。

: function.json path 属性を変更したり、 routePrefix を追加したりすると、jax-rs エンドポイントは正しくルーティングされません。詳細は config-azure-paths を参照してください。

ルートパスの設定

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

path を変更したり、 azure-config/function.json デプロイメントディスクリプタ内に routePrefix を追加したりする場合、コードや設定にはパスに指定した接頭辞も反映させる必要があります。