Bereitstellen einer Quarkus-Anwendung in Azure Container Apps

Abgeschlossen

In dieser Lektion erstellen Sie die Azure-Container-Apps-Umgebung mithilfe der Azure CLI.

Einrichten der Dockerfile für die Dockerus-Anwendung

Container-Apps werden verwendet, um containerisierte Anwendungen bereitzustellen. Daher müssen Sie zuerst die Dockerus-Anwendung in ein Docker-Image containern. Dieser Prozess ist einfach, da das Plugin Von Quarkus Maven bereits einige Dockerfiles unter src/main/dockergeneriert hat.

Verwenden Sie diesen Befehl, um eine der folgenden Dockerfiles umzubenennen, Dockerfile.jvm, um dockerfile zu und in den Stammordner zu verschieben:

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

Ersetzen Sie den Inhalt nach dem langen Kommentar in der Dockerfile-Datei durch Folgendes:

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

In dieser Dockerfile-Datei wird erwartet, dass die Dockerus-Anwendung als quarkus-run.jar Datei gepackt wird. Dieser Name ist der Standardname für die Quarkus-Anwendung, wenn er als JAR-Datei gepackt wird. Sie müssen sicherstellen, dass die Quarkus-Anwendung als JAR-Datei verpackt ist. Führen Sie dazu den folgenden Maven-Befehl aus:

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

Mit diesem Befehl wird die Anwendung Tierkus in eine JAR-Datei verpackt und eine quarkus-run.jar Datei im ordner Ziel-/Quarkus-App generiert.

Erstellen der Container-Apps-Umgebung und Bereitstellen des Containers

Nachdem sich die Dockerfile-Datei nun am richtigen Speicherort befindet, können Sie die Container-Apps-Umgebung erstellen und den Container mithilfe eines einzigen Azure CLI-Befehls bereitstellen. Führen Sie den folgenden Befehl im Stammverzeichnis des Projekts aus:

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

Dieser Befehl führt mehrere Aktionen aus:

  • Erstellt eine Container-Apps-Umgebung, wenn sie nicht vorhanden ist
  • Erstellt eine Azure-Registrierung, wenn sie nicht vorhanden ist
  • Erstellt einen Log Analytics-Arbeitsbereich, wenn er nicht vorhanden ist
  • Erstellt das Docker-Image und pusht es an die Azure-Registrierung.
  • Stellt das Docker-Image in der Container-Apps-Umgebung bereit.

Der Befehl az containerapp up dauert einige Zeit, bis der Befehl ausgeführt wird. Es sollte eine Ausgabe angezeigt werden, die etwa wie folgt ist:

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! 

Überprüfen der Bereitstellung

Sie können überprüfen, ob die Bereitstellung auf verschiedene Arten erfolgreich war. Die einfachste Möglichkeit besteht darin, im Azure-Portalnach Ihrer Ressourcengruppe zu suchen. Es sollten Ressourcen wie die folgenden angezeigt werden:

Screenshot der bereitgestellten Anwendung.

Sie können die Bereitstellung auch überprüfen, indem Sie den folgenden Befehl ausführen. Er listet alle Ressourcen auf, die vom Befehl az containerapp up erstellt wurden.

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

Es sollte eine Ausgabe angezeigt werden, die der folgenden ähnelt:

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

Überprüfen der bereitgestellten Anwendung

Sie können nun die bereitgestellte Anwendung überprüfen. Zuerst müssen Sie die URL der Anwendung abrufen. Sie können ihn abrufen, indem Sie den folgenden Befehl ausführen:

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"

Ihre Anwendung ist bei https://<app-name>.azurecontainerapps.io/bereit. Beachten Sie das https-Protokoll. Dieses Protokoll wird verwendet, da die Anwendung mit einem TLS-Zertifikat bereitgestellt wird. Um die Anwendung zu testen, können Sie cURL verwenden:

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

Abrufen der Daten mithilfe einer neuen cURL-Anforderung:

curl https://$AZ_APP_URL/api/todos

Dieser Befehl gibt die Liste aller to-do Elemente aus der Datenbank zurück:

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

Wenn Sie diesen Befehl ausführen, können Sie die Protokolle für Ihren Container streamen, wenn Sie neue Aufgaben erstellen:

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

Führen Sie weitere cURL-Befehle aus. Sie sollten die Protokolle sehen, die im Terminal scrollen.

curl https://$AZ_APP_URL/api/todos

Hinweis

Sie können die URL auch in einem Webbrowser öffnen, damit eine Liste der To-do-Elemente zurückgegeben wird.