Compartir vía


Implementación de una aplicación Java con Open Liberty o WebSphere Liberty en Azure Container Apps

En este artículo se muestra cómo ejecutar Open Liberty o WebSphere Liberty en Azure Container Apps. En este artículo, realizará las actividades siguientes:

  • Ejecutar una aplicación Java, Java EE, Yakarta EE o Microprofile en el runtime en Open Liberty o WebSphere Liberty.
  • Compilar la imagen de Docker de la aplicación mediante imágenes de contenedor de Liberty.
  • Implementar la aplicación contenedorizada en Azure Container Apps.

Para más información sobre Open Liberty, consulte la página del proyecto Open Liberty. Para más información sobre IBM WebSphere Liberty, consulte la página del producto de WebSphere Liberty.

Este artículo está diseñado para ayudarle a llegar rápidamente a la implementación. Antes de ir a producción, debe explorar Tuning Liberty.

Si está interesado en proporcionar comentarios o trabajar estrechamente en sus escenarios de migración con el equipo de ingeniería que desarrolla WebSphere en soluciones de Azure, rellene esta breve encuesta sobre la migración de WebSphere e incluya la información de contacto. El equipo de administradores de programas, arquitectos e ingenieros se pondrá en contacto rápidamente con usted para iniciar una estrecha colaboración.

Requisitos previos

  • Suscripción a Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
  • Prepare una máquina local con un sistema operativo similar a Windows o Unix instalado, por ejemplo, Ubuntu, macOS o Subsistema de Windows para Linux.
  • Instale la CLI de Azure 2.53.0 o superior para ejecutar los comandos de la CLI de Azure.
    • Inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión en Azure con la CLI de Azure.
    • En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para obtener más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
    • Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
  • Instala la versión 17 o una posterior de implementación de Java SE; por ejemplo, Compilación de Microsoft de OpenJDK.
  • Instale Maven 3.5.0 o una versión superior.
  • Instale Docker para el sistema operativo.
  • Asegúrese de que Git está instalado.

Inicio de sesión en Azure

Si no lo ha hecho aún, inicie sesión en la suscripción de Azure con el comando az login y siga las instrucciones de la pantalla.

az login

Nota:

Puede ejecutar la mayoría de los comandos de la CLI de Azure en PowerShell igual que en Bash. La diferencia solo existe cuando se usan variables. En las secciones siguientes, la diferencia se aborda en diferentes pestañas cuando sea necesario.

Si hay varios inquilinos de Azure asociados a sus credenciales de Azure, debe indicar en qué inquilino desea iniciar sesión. Puede hacerlo con la opción --tenant, por ejemplo, az login --tenant contoso.onmicrosoft.com.

Si tiene varias suscripciones dentro de un solo inquilino, asegúrese de que ha iniciado sesión con la que quiere usar mediante az account set --subscription <subscription-id>.

Crear un grupo de recursos

Un grupo de recursos de Azure es un grupo lógico en el que se implementan y administran recursos de Azure.

Cree un grupo de recursos denominado java-liberty-project mediante el comando az group create en la ubicación eastus. Este grupo de recursos se usa más adelante para crear la instancia de Azure Container Registry (ACR) y la instancia de Azure Container Apps.

export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus

Creación de una instancia de ACR

Use el comando az acr create para crear la instancia de ACR. En el ejemplo siguiente se crea una instancia de ACR denominada youruniqueacrname. Asegúrese de que youruniqueacrname sea única en Azure.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic \
    --admin-enabled

Después de un corto tiempo, debería ver una salida JSON que contiene las siguientes líneas:

  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "resourceGroup": "java-liberty-project",

Conexión a la instancia de ACR

Tendrá que iniciar sesión en la instancia de ACR para poder insertar una imagen en ella. Si decide ejecutar comandos localmente, asegúrese de que el demonio de Docker se está ejecutando y ejecute los siguientes comandos para comprobar la conexión:

export ACR_LOGIN_SERVER=$(az acr show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)
export ACR_USER_NAME=$(az acr credential show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'username' \
    --output tsv)
export ACR_PASSWORD=$(az acr credential show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'passwords[0].value' \
    --output tsv)

docker login $ACR_LOGIN_SERVER -u $ACR_USER_NAME -p $ACR_PASSWORD

Debería ver Login Succeeded al final de la salida de los comandos si ha iniciado sesión correctamente en la instancia de ACR.

Creación de un entorno

Un entorno de Azure Container Apps crea un límite seguro alrededor de un grupo de aplicaciones de contenedor. Las aplicaciones de contenedor implementadas en el mismo entorno se implementan en la misma red virtual y escriben registros en la misma área de trabajo de Log Analytics. Use el comando az containerapp env create para crear un entorno. En el ejemplo siguiente se crea un entorno denominado youracaenvname:

export ACA_ENV=youracaenvname
az containerapp env create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location eastus \
    --name $ACA_ENV

Si se le pide que instale una extensión, responda Y.

Después de un corto tiempo, debería ver una salida JSON que contiene las siguientes líneas:

  "provisioningState": "Succeeded",
  "type": "Microsoft.App/managedEnvironments"
  "resourceGroup": "java-liberty-project",

Crear una instancia de Azure SQL Database

En esta sección, creará una base de datos única de Azure SQL Database para usarla con la aplicación.

Cree una base de datos única en Azure SQL Database siguiendo los pasos de la CLI de Azure descritos en Inicio rápido: Creación de una base de datos única - Azure SQL Database. Ejecute los pasos hasta Consultar la base de datos. Siga los pasos siguientes a medida que avanza por el artículo y vuelva a este documento después de crear y configurar el servidor de base de datos:

Cuando llegue a la sección Establecer valores de parámetros del inicio rápido, genere la salida y guarde los valores de todas las variables del ejemplo de código con la etiqueta Variable block, incluidos resourceGroup,server, database, login y password. Defina las siguientes variables de entorno después de reemplazar los marcadores de posición <resourceGroup>,<server>, <database>, <login> y <password> con esos valores.

export DB_RESOURCE_GROUP=<resourceGroup>
export DB_SERVER_NAME=<server>.database.windows.net
export DB_NAME=<database>
export DB_USER=<login>
export DB_PASSWORD=<password>

Si quiere probar la aplicación localmente más adelante, siga estos pasos para asegurarse de que la dirección IPv4 del cliente puede conectarse:

  1. En el portal, busque y seleccione Bases de datos SQL y, a continuación, seleccione su base de datos en la lista.

  2. Seleccione Información general.

  3. Asegúrese de que la pestaña Introducción está seleccionada en el centro de la página.

  4. En Configurar acceso, seleccione Configurar.

  5. Selecciona Agregar la dirección IPv4 del cliente.

  6. Seleccione Guardar.

  7. Puede encontrar y configurar reglas de firewall en el panel Redes y la pestaña Acceso público.

    Captura de pantalla de las reglas de firewall: permitir el acceso de cliente.

Configuración y compilación de la imagen de aplicación

Para implementar y ejecutar la aplicación de Liberty en Azure Container Apps, contenedorice la aplicación como una imagen de Docker mediante las imágenes de contenedor de Open Liberty o las imágenes de contenedor de WebSphere Liberty.

Siga los pasos que aparecen en esta sección para implementar la aplicación de ejemplo en el entorno de ejecución de Liberty. Esos pasos usan Maven.

Extracción de la aplicación

Use los siguientes comandos para preparar el código de ejemplo de esta guía. El ejemplo se encuentra en GitHub.

git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
git checkout 20231026

Si ve un mensaje acerca de estar en estado detached HEAD, puede omitir este mensaje. Solo significa que ha desprotegido una etiqueta.

En este artículo se usa java-app. Esta es la estructura de archivos de la aplicación:

java-app
├─ src/main/
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml

Los directorios java, resources y webapp contienen el código fuente de la aplicación de ejemplo. El código declara y usa un origen de datos denominado jdbc/JavaEECafeDB.

En el directorio raíz java-app, hay dos archivos para crear la imagen de aplicación con Open Liberty o WebSphere Liberty.

En el directorio liberty/config, el archivo server.xml se usa para configurar la conexión de base de datos para el clúster de Open Liberty y WebSphere Liberty.

Compilación del proyecto

Utilice el siguiente comando para compilar la aplicación:

cd <path-to-your-repo>/java-app
mvn clean install

Si la compilación se realiza correctamente, debería ver una salida similar a la siguiente al final de la compilación.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------

Si no ve esta salida, solucione el problema antes de continuar.

(Opcional) Prueba local del proyecto

Ahora puede usar los pasos siguientes para ejecutar y probar el proyecto localmente antes de realizar la implementación en Azure. Para mayor comodidad, use liberty-maven-plugin. Para más información sobre liberty-maven-plugin, consulte Creación de una aplicación web con Maven. Para la aplicación, puede hacer algo similar mediante cualquier otro mecanismo, como el IDE local.

Nota:

Si seleccionó una implementación de base de datos "sin servidor", compruebe que la base de datos SQL no ha entrado en modo de pausa. Una manera de hacerlo es iniciar sesión en el editor de consultas de la base de datos como se describe en Inicio rápido: Uso del editor de consultas de Azure Portal (versión preliminar) para consultar Azure SQL Database.

  1. Inicie la aplicación mediante liberty:run. liberty:run usa las variables de entorno relacionadas con la base de datos definidas en el paso anterior.

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. Compruebe que la aplicación funciona según lo previsto. Si el resultado de la operación es satisfactorio, debería ver un mensaje similar a [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. en la salida del comando. Vaya a http://localhost:9080/ en el explorador para comprobar que la aplicación es accesible y que todas las funciones hacen su trabajo.

  3. Presione Ctrl+C para detener.

Compilación de la imagen

Ahora puede ejecutar el comando docker buildx build para compilar la imagen, como se muestra en el ejemplo siguiente:

cd <path-to-your-repo>/java-app

# If you are running with Open Liberty
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .

# If you are running with WebSphere Liberty
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .

(Opcional) Prueba local de la imagen de Docker

Ahora puede usar los pasos siguientes para probar la imagen de Docker localmente antes de realizar la implementación en Azure:

  1. Ejecute la imagen usando el siguiente comando. Este comando utiliza las variables de entorno relacionadas con la base de datos definidas anteriormente.

    docker run -it --rm -p 9080:9080 \
        -e DB_SERVER_NAME=${DB_SERVER_NAME} \
        -e DB_NAME=${DB_NAME} \
        -e DB_USER=${DB_USER} \
        -e DB_PASSWORD=${DB_PASSWORD} \
        javaee-cafe:v1
    
  2. Una vez que se inicie el contenedor, vaya a http://localhost:9080/ en el explorador para acceder a la aplicación.

  3. Presione Ctrl+C para detener.

Carga de la imagen a ACR

A continuación, cargue la imagen compilada en el ACR creado en los pasos anteriores.

Si aún no lo ha hecho, use el siguiente comando para iniciar sesión en ACR:

docker login -u ${ACR_USER_NAME} -p ${ACR_PASSWORD} ${ACR_LOGIN_SERVER}

Utilice los siguientes comandos para etiquetar e insertar la imagen del contenedor:

docker tag javaee-cafe:v1 ${ACR_LOGIN_SERVER}/javaee-cafe:v1
docker push ${ACR_LOGIN_SERVER}/javaee-cafe:v1

Implementación de la aplicación en Azure Container Apps

Use los siguientes comandos para crear una instancia de Azure Container Apps para ejecutar la aplicación después de extraer la imagen de ACR. En este ejemplo se crea una instancia de Azure Container Apps denominada youracainstancename.

export ACA_NAME=youracainstancename
az containerapp create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --image ${ACR_LOGIN_SERVER}/javaee-cafe:v1 \
    --environment $ACA_ENV \
    --registry-server $ACR_LOGIN_SERVER \
    --registry-username $ACR_USER_NAME \
    --registry-password $ACR_PASSWORD \
    --target-port 9080 \
    --env-vars \
        DB_SERVER_NAME=${DB_SERVER_NAME} \
        DB_NAME=${DB_NAME} \
        DB_USER=${DB_USER} \
        DB_PASSWORD=${DB_PASSWORD} \
    --ingress 'external'

La salida correcta es un objeto JSON que incluye la propiedad "type": "Microsoft.App/containerApps".

Prueba de la aplicación

Use el siguiente comando para obtener una dirección URL completa para acceder a la aplicación:

echo https://$(az containerapp show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --query properties.configuration.ingress.fqdn \
    --output tsv)

Abra un navegador web en la URL para acceder a la aplicación y probarla. La siguiente captura de pantalla muestra la aplicación en ejecución:

Captura de pantalla que muestra la aplicación de Liberty de Java implementada correctamente en Azure Container Apps.

Limpieza de recursos

Para evitar los cargos de Azure, se recomienda limpiar los recursos que no sean necesarios. Cuando el clúster ya no se necesite, puede usar el comando az group delete para quitar el grupo de recursos, el registro de contenedor, las aplicaciones de contenedor, el servidor de base de datos y todos los recursos relacionados.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP --yes --no-wait

A continuación, use el siguiente comando para quitar la imagen de contenedor del servidor de Docker local:

docker rmi -f ${ACR_LOGIN_SERVER}/javaee-cafe:v1

Pasos siguientes

Puede obtener más información en las referencias que se usan en esta guía:

Si desea explorar las opciones para ejecutar los productos WebSphere en Azure, consulte ¿Cuáles son las soluciones para ejecutar la familia de productos WebSphere en Azure?