Distribuire un'applicazione Quarkus in App contenitore di Azure

Completato

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

Configurare il Dockerfile per l'applicazione Quarkus

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 Dockerfile 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 commento lungo nel Dockerfile con quanto segue:

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. Questo nome è il nome predefinito per l'applicazione Quarkus quando viene creato come file JAR. È necessario assicurarsi che l'applicazione Quarkus sia inserita in un 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 crea un pacchetto dell'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 usando 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:

  • Crea un ambiente app contenitore se non esiste
  • Crea un registro di Azure se non esiste
  • Crea un'area di lavoro Log Analytics se non esiste
  • Compila l'immagine Docker ed 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. Verrà visualizzato un output 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 che mostra l'applicazione distribuita.

È 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

Verrà visualizzato un output simile al 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

Verificare l'applicazione distribuita

È ora possibile verificare l'applicazione 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 di https. Questo protocollo viene usato perché l'applicazione viene distribuita con un certificato TLS. Per testare l'applicazione, è possibile usare 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

Recuperare i dati usando una nuova richiesta cURL:

curl https://$AZ_APP_URL/api/todos

Questo comando restituisce l'elenco di tutti gli elementi to-do dal 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 si creano nuove attività:

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

Eseguire altri comandi cURL. Verrà 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à.