Quarkus アプリケーションを Azure Container Apps にデプロイする

完了

このユニットでは、Azure CLI を使用して Azure Container Apps 環境を作成します。

Quarkus アプリケーションの Dockerfile を設定する

Container Apps は、コンテナー化されたアプリケーションをデプロイするために使用されます。 そのため、最初に Quarkus アプリケーションを Docker イメージにコンテナー化する必要があります。 Quarkus Maven プラグインが既に src/main/dockerの下でいくつかの Dockerfile を生成しているため、このプロセスは簡単です。

Dockerfile し、ルート フォルダーに移動するには、次のコマンドを使用して、Dockerfile.jvm これらの Dockerfile の名前を変更します。

mv src/main/docker/Dockerfile.jvm ./Dockerfile

Dockerfile の長いコメントの後の内容を次のように置き換えます。

FROM registry.access.redhat.com/ubi8/openjdk-17:1.18

ENV LANGUAGE='en_US:en'


# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/

EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"

ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]

この Dockerfile は、Quarkus アプリケーションが quarkus-run.jar ファイルとしてパッケージ化されることを想定しています。 この名前は、JAR ファイルとしてパッケージ化されている場合の Quarkus アプリケーションの既定の名前です。 Quarkus アプリケーションが JAR ファイルとしてパッケージ化されていることを確認する必要があります。 これを行うには、次の Maven コマンドを実行します。

./mvnw package    # On Mac or Linux
mvnw.cmd package  # On Windows

このコマンドは、Quarkus アプリケーションを JAR ファイルにパッケージ化し、target/quarkus-app フォルダーに quarkus-run.jar ファイルを生成します。

Container Apps 環境を作成し、コンテナーをデプロイする

Dockerfile が適切な場所に配置されたので、1 つの Azure CLI コマンドを使用して Container Apps 環境を作成し、コンテナーをデプロイできます。 プロジェクトのルートで次のコマンドを実行します。

az containerapp up \
    --name "$AZ_CONTAINERAPP" \
    --environment "$AZ_CONTAINERAPP_ENV" \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --ingress external \
    --target-port 8080 \
    --source .

このコマンドは、いくつかの処理を実行します。

  • Container Apps 環境が存在しない場合は作成します
  • Azure レジストリが存在しない場合は作成します
  • Log Analytics ワークスペースが存在しない場合は作成します
  • Docker イメージをビルドして Azure レジストリにプッシュする
  • Docker イメージを Container Apps 環境にデプロイします

az containerapp up コマンドの実行には時間がかかります。 次のような出力が表示されます。

Using resource group 'rgazure-deploy-quarkus'
Creating ContainerAppEnvironment 'caeazure-deploy-quarkus' in resource group rgazure-deploy-quarkus
No Log Analytics workspace provided.
Generating a Log Analytics workspace with name "workspace-rgazuredeployquarkusEED7"
Creating Azure Container Registry ca001ad52ae7acr in resource group rgazure-deploy-quarkus

Run ID: ca3 was successful after 41s
Creating Containerapp caazure-deploy-quarkus in resource group rgazure-deploy-quarkus
Adding registry password as a secret with name "ca001ad52ae7acrazurecrio-ca001nxc57acr"

Your container app caazure-deploy-quarkus has been created and deployed! Congrats! 

デプロイの検証

デプロイが成功したことをいくつかの方法で検証できます。 最も簡単な方法は、Azure portalでリソース グループを検索することです。 次のようなリソースが表示されます。

デプロイされたアプリケーションを示すスクリーンショット。

次のコマンドを実行して、デプロイを確認することもできます。 az containerapp up コマンドによって作成されたすべてのリソースが一覧表示されます。

az resource list \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --output table

次のような出力が表示されます。

Name                                ResourceGroup           Location    Type                                       Status
----------------------------------  ----------------------  ----------  -----------------------------------------  --------
caea3a6e0afeacr                     rgazure-deploy-quarkus  eastus      Microsoft.ContainerRegistry/registries
psqlazure-deploy-quarkus            rgazure-deploy-quarkus  eastus      Microsoft.DBforPostgreSQL/flexibleServers
caazure-deploy-quarkus              rgazure-deploy-quarkus  eastus      Microsoft.App/containerApps
caeazure-deploy-quarkus             rgazure-deploy-quarkus  eastus      Microsoft.App/managedEnvironments
workspace-rgazuredeployquarkuscDD3  rgazure-deploy-quarkus  eastus      Microsoft.OperationalInsights/workspaces

デプロイされたアプリケーションを確認する

これで、デプロイされたアプリケーションを確認できます。 まず、アプリケーションの URL を取得する必要があります。 これを取得するには、次のコマンドを実行します。

export AZ_APP_URL=$(
    az containerapp show \
        --name "$AZ_CONTAINERAPP" \
        --resource-group "$AZ_RESOURCE_GROUP" \
        --query "properties.configuration.ingress.fqdn" \
        --output tsv \
)

echo "AZ_APP_URL=$AZ_APP_URL"

アプリケーションは https://<app-name>.azurecontainerapps.io/で準備が整いました。 https プロトコルに注目してください。 このプロトコルは、アプリケーションが TLS 証明書を使用してデプロイされるために使用されます。 アプリケーションをテストするには、cURL を使用します。

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Configuration","details":"Congratulations, you have set up your Quarkus application correctly!","done": "true"}' \
    https://$AZ_APP_URL/api/todos

新しい cURL 要求を使用してデータを取得します。

curl https://$AZ_APP_URL/api/todos

このコマンドは、データベースからすべての to-do 項目の一覧を返します。

[
   {
      "description" : "Take Quarkus MS Learn",
      "details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
      "done" : true,
      "id" : 1
   },
   {
      "description" : "Take Azure Container MS Learn",
      "details" : "Take the ACA Learn module",
      "done" : false,
      "id" : 2
   },
   {
      "description" : "Configuration",
      "details" : "Congratulations, you have set up your Quarkus application correctly!",
      "done" : true,
      "id" : 3
   }
]

このコマンドを実行すると、新しい To Do を作成するときにコンテナーのログをストリーミングできます。

az containerapp logs show \
    --name "$AZ_CONTAINERAPP" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --follow

その他の cURL コマンドを実行します。 ターミナルでログがスクロールしていることがわかります。

curl https://$AZ_APP_URL/api/todos

注記

Web ブラウザーで URL を開き、Todo 項目の一覧を返すこともできます。