Distribuire un'applicazione Quarkus in App contenitore di Azure

Completato

In questa unità viene creato l'ambiente di App contenitore di Azure usando l'interfaccia della riga di comando di Azure.

Configurare Dockerfile per l'applicazione Quarkus

L’App contenitore viene usato per distribuire applicazioni in contenitori. È quindi prima necessario inserire l'applicazione Quarkus in un'immagine Docker. Questo processo è semplice perché il plug-in Quarkus Maven ha già generato alcuni file Docker in src/main/docker.

Usare questo comando per rinominare uno di questi Dockerfile, Dockerfile.jvm, in Dockerfile e spostarlo nella cartella radice:

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

Sostituire il contenuto dopo il lungo commento nel file Docker con il seguente:

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" ]

Questo Dockerfile prevede che l'applicazione Quarkus venga inserita nel pacchetto come file quarkus-run.jar. Si tratta del nome predefinito per l'applicazione Quarkus, quando viene inserita nel pacchetto come file JAR. È quindi necessario assicurarsi che l'applicazione Quarkus sia inserita nel pacchetto come file JAR. A tale scopo, eseguire il comando Maven seguente:

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

Questo comando inserisce l'applicazione Quarkus in un file JAR e genera un file quarkus-run.jar nella cartella target/quarkus-app.

Creare l'ambiente App contenitore e distribuire il contenitore

Ora che il Dockerfile si trova nella posizione corretta, è possibile creare l'ambiente App contenitore e distribuire il contenitore in un singolo comando dell'interfaccia della riga di comando di Azure. Eseguire il comando seguente nella radice del progetto:

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

Questo comando esegue diverse operazioni:

  • Se non esiste, crea un ambiente App contenitore
  • Se non esiste, crea un registro di Azure
  • Se non esiste, crea un'area di lavoro Log Analytics
  • Compila l'immagine Docker e ne esegue il push nel Registro di sistema di Azure
  • Distribuisce l'immagine Docker nell'ambiente App contenitore

L'esecuzione del comando az containerapp up richiede tempo. L'output visualizzato sarà simile al seguente:

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! 

Convalidare la distribuzione

È possibile verificare che la distribuzione abbia avuto esito positivo in diversi modi. Il modo più semplice consiste nel cercare il gruppo di risorse nel Portale di Azure. Verranno visualizzate risorse simili alle seguenti:

Screenshot that shows the deployed application.

È anche possibile controllare la distribuzione eseguendo il comando seguente. Elenca tutte le risorse create dal comando az containerapp up.

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

L'output visualizzato sarà simile all'esempio seguente:

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

Eseguire l'applicazione Quarkus distribuita

È ora possibile eseguire l'applicazione Quarkus distribuita. Prima di tutto, è necessario ottenere l'URL dell'applicazione. È possibile ottenerlo eseguendo il comando seguente:

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"

L'applicazione è pronta in https://<app-name>.azurecontainerapps.io/. Si noti il protocollo https. Questo protocollo viene usato perché l'applicazione viene distribuita con un certificato TLS. Per testare l'applicazione, è possibile usare cUR:

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

Recuperare i dati usando una nuova richiesta cURL:

curl https://$AZ_APP_URL/api/todos

Questo comando restituisce l'elenco di tutte le attività del database:

[
   {
      "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
   }
]

Se si esegue questo comando, è possibile trasmettere i log per il contenitore quando vengono create nuove attività:

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

Eseguire altri comandi cURL. Dovrebbe essere visualizzato lo scorrimento dei log nel terminale.

curl https://$AZ_APP_URL/api/todos

Nota

È anche possibile aprire l'URL in un Web browser per restituire l'elenco di attività.