Implementación de una aplicación de Quarkus en Azure Container Apps
En esta unidad, creará el entorno de Azure Container Apps mediante la CLI de Azure.
Configuración del Dockerfile para la aplicación Quarkus
Container Apps se usa para implementar aplicaciones en contenedor. Por lo tanto, primero debe incluir la aplicación Quarkus en una imagen de Docker. Este proceso es fácil porque el complemento Quarkus Maven ya ha generado algunos dockerfiles en src/main/docker
.
Use este comando para cambiar el nombre de uno de estos Dockerfiles, Dockerfile.jvm, a Dockerfile y moverlo a la carpeta raíz:
mv src/main/docker/Dockerfile.jvm ./Dockerfile
Reemplace el contenido después del comentario largo en el Dockerfile por lo siguiente:
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" ]
Este Dockerfile espera que la aplicación Quarkus se empaquete como un archivo quarkus-run.jar. Este nombre es el nombre predeterminado de la aplicación Quarkus cuando se empaqueta como un archivo JAR. Debe asegurarse de que la aplicación Quarkus está empaquetada como un archivo JAR. Para ello, ejecute el siguiente comando de Maven:
./mvnw package # On Mac or Linux
mvnw.cmd package # On Windows
Este comando empaqueta la aplicación Quarkus en un archivo JAR y genera un archivo quarkus-run.jar en la carpeta target/quarkus-app.
Creación del entorno de Container Apps e implementación del contenedor
Ahora que Dockerfile está en la ubicación correcta, puede crear el entorno de Container Apps e implementar el contenedor mediante un único comando de la CLI de Azure. Ejecute el siguiente comando en la raíz del proyecto:
az containerapp up \
--name "$AZ_CONTAINERAPP" \
--environment "$AZ_CONTAINERAPP_ENV" \
--location "$AZ_LOCATION" \
--resource-group "$AZ_RESOURCE_GROUP" \
--ingress external \
--target-port 8080 \
--source .
Este comando hace varias cosas:
- Crea un entorno de Container Apps si no existe
- Crea un registro de Azure si no existe
- Crea un área de trabajo de Log Analytics si no existe
- Compila la imagen de Docker e la inserta en el registro de Azure.
- Implementa la imagen de Docker en el entorno de Container Apps
El comando az containerapp up
tarda algún tiempo en ejecutarse. Debería ver la salida similar a la siguiente:
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!
Validación de la implementación
Puede validar que la implementación se ha realizado correctamente de varias maneras. La manera más fácil es buscar el grupo de recursos en Azure Portal. Debería ver recursos similares a los siguientes:
También puede comprobar la implementación ejecutando el siguiente comando. Enumera todos los recursos creados por el comando az containerapp up
.
az resource list \
--location "$AZ_LOCATION" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Debería ver la salida similar a esta:
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
Comprobación de la aplicación implementada
Ahora puede comprobar la aplicación implementada. En primer lugar, debe obtener la dirección URL de la aplicación. Para obtenerlo, ejecute el siguiente comando:
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"
La aplicación está lista para https://<app-name>.azurecontainerapps.io/
. Observe el protocolo https
. Ese protocolo se usa porque la aplicación se implementa con un certificado TLS. Para probar la aplicación, puede usar 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
Recupere los datos mediante una nueva solicitud cURL:
curl https://$AZ_APP_URL/api/todos
Este comando devuelve la lista de todos los elementos de to-do de la base de datos:
[
{
"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
}
]
Si ejecuta este comando, puede transmitir los registros del contenedor al crear nuevos to-dos:
az containerapp logs show \
--name "$AZ_CONTAINERAPP" \
--resource-group "$AZ_RESOURCE_GROUP" \
--follow
Ejecute más comandos cURL. Debería ver los registros que se desplazan en el terminal.
curl https://$AZ_APP_URL/api/todos
Nota:
También puede abrir la dirección URL en un explorador web para devolver la lista de elementos pendientes.