Een Quarkus-toepassing implementeren in Azure Container Apps

Voltooid

In deze les maakt u de Azure Container Apps-omgeving met behulp van de Azure CLI.

Het Dockerfile instellen voor de Quarkus-toepassing

Container Apps wordt gebruikt voor het implementeren van toepassingen in containers. U moet dus eerst de Quarkus-toepassing in een Docker-installatiekopieën in een container zetten. Dit proces is eenvoudig omdat de Quarkus Maven-invoegtoepassing al enkele Dockerfiles onder src/main/dockerheeft gegenereerd.

Gebruik deze opdracht om de naam van een van deze Dockerfiles, Dockerfile.jvm, te wijzigen in Dockerfile en deze naar de hoofdmap te verplaatsen:

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

Vervang de inhoud na de lange opmerking in het Dockerfile door het volgende:

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 dit Dockerfile wordt verwacht dat de Quarkus-toepassing wordt verpakt als een quarkus-run.jar-bestand . Deze naam is de standaardnaam voor de Quarkus-toepassing wanneer deze is verpakt als een JAR-bestand. U moet ervoor zorgen dat de Quarkus-toepassing is verpakt als een JAR-bestand. Voer hiervoor de volgende Maven-opdracht uit:

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

Met deze opdracht wordt de Quarkus-toepassing verpakt in een JAR-bestand en wordt een quarkus-run.jar-bestand gegenereerd in de map target/quarkus-app .

De Container Apps-omgeving maken en de container implementeren

Nu de Dockerfile zich op de juiste locatie bevindt, kunt u de Container Apps-omgeving maken en de container implementeren met behulp van één Azure CLI-opdracht. Voer de volgende opdracht uit in de hoofdmap van het project:

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

Met deze opdracht worden verschillende dingen uitgevoerd:

  • Hiermee maakt u een Container Apps-omgeving als deze niet bestaat
  • Hiermee maakt u een Azure-register als het niet bestaat
  • Hiermee maakt u een Log Analytics-werkruimte als deze niet bestaat
  • Hiermee wordt de Docker-installatiekopieën gebouwd en naar het Azure-register gepusht
  • Hiermee wordt de Docker-installatiekopieën geïmplementeerd in de Container Apps-omgeving

Het uitvoeren van de az containerapp up opdracht duurt enige tijd. Als het goed is, ziet u uitvoer die er ongeveer als volgt uitziet:

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! 

De implementatie valideren

U kunt controleren of de implementatie op verschillende manieren is geslaagd. De eenvoudigste manier is om te zoeken naar uw resourcegroep in Azure Portal. Als het goed is, ziet u resources die er ongeveer als volgt uitzien:

Screenshot that shows the deployed application.

U kunt de implementatie ook controleren door de volgende opdracht uit te voeren. Hierin worden alle resources weergegeven die door de az containerapp up opdracht zijn gemaakt.

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

Als het goed is, ziet u uitvoer die er ongeveer als volgt uit ziet:

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

De geïmplementeerde Quarkus-toepassing uitvoeren

U kunt nu de geïmplementeerde Quarkus-toepassing uitvoeren. Eerst moet u de URL van de toepassing ophalen. U kunt deze ophalen door de volgende opdracht uit te voeren:

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"

Uw toepassing is gereed op https://<app-name>.azurecontainerapps.io/. Let op het https protocol. Dat protocol wordt gebruikt omdat de toepassing wordt geïmplementeerd met een TLS-certificaat. Als u de toepassing wilt testen, kunt u cURL gebruiken:

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

Haal de gegevens op met behulp van een nieuwe cURL-aanvraag:

curl https://$AZ_APP_URL/api/todos

Met deze opdracht wordt de lijst met alle taakitems uit de database geretourneerd:

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

Als u deze opdracht uitvoert, kunt u de logboeken voor uw container streamen wanneer u nieuwe taken maakt:

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

Voer meer cURL-opdrachten uit. U ziet nu dat de logboeken in de terminal schuiven.

curl https://$AZ_APP_URL/api/todos

Notitie

U kunt ook de URL in een webbrowser openen om de lijst met taakitems te retourneren.