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のアカウント 無料アカウントでも大丈夫です。
ソリューション
このガイドでは、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.16.4.Final
このコマンドを実行すると、インタラクティブモードでmavenが実行され、いくつかのビルドプロパティーの入力を求められます:
-
groupId
- この生成されたプロジェクトの maven グループ IDorg.acme
と入力します。 -
artifactId
- この生成されたプロジェクトの maven artifactId を入力します。quarkus-demo
と入力します。 -
version
- この生成されたプロジェクトのバージョン。 -
package
- デフォルトはgroupId
-
appName
- 既定値を使用します。これは、Azure でのアプリケーション名です。*.azurewebsites.net
以下の一意のサブドメイン名である必要があります。そうしないと、Azure へのデプロイに失敗します。 -
appRegion
- デフォルトはwestus
です。お使いの azure リージョンに依存します。 -
function
- デフォルトのquarkus
を使用してください。あなたの azure 関数の名前。何でも構いません。 -
resourceGroup
- デフォルト値を使用してください。どんな値でも構いません。
上記の値は、生成された pom.xml
ファイルのプロパティーとして定義されています。
ビルドと 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
を追加したりする場合、コードや設定にはパスに指定した接頭辞も反映させる必要があります。