Implementación de una aplicación Java con Open Liberty en Azure Container Apps
En este artículo se muestra cómo ejecutar Open Liberty en Azure Container Apps. En este artículo se realizan las siguientes actividades:
- Ejecute la aplicación Java, Java EE, Jakarta EE o MicroProfile en el entorno de ejecución de Open Liberty.
- Construya la imagen Docker de la aplicación mediante imágenes de contenedor Liberty.
- Implemente la aplicación en contenedor en Azure Container Apps.
Para obtener más información sobre Open Liberty, consulte la página del proyecto Open Liberty. Para obtener más información sobre IBM WebSphere Liberty, consulte la página del producto WebSphere Liberty.
Este artículo está diseñado para ayudarle a llevar a cabo el despliegue de forma rápida. Antes de pasar a producción, es recomendable que explores 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 de 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.
Prerrequisitos
- Una suscripción de Azure. Si no tiene una suscripción de Azure , cree una cuenta gratuita de antes de empezar.
- Prepare una máquina local con windows o sistema operativo similar a Unix instalado( por ejemplo, Ubuntu, macOS o Subsistema de Windows para Linux).
- Instale la CLI de Azure 2.62.0 o posterior para ejecutar comandos de la CLI de Azure.
- Inicie sesión con la CLI de Azure mediante el comando
az login
. Para finalizar el proceso de autenticación, siga los pasos que se muestran en el terminal. Consulte Inicio de sesión en Azure con la CLI de Azure para ver otras opciones de inicio de sesión. - Cuando se le solicite, instale la extensión de la CLI de Azure en el primer uso. Para más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
- Ejecute
az version
para buscar la versión y las bibliotecas dependientes que están instaladas. Para actualizar a la versión más reciente, ejecuteaz upgrade
.
- Inicie sesión con la CLI de Azure mediante el comando
- Instale una implementación de Java SE versión 17 - por ejemplo, compilación de Microsoft de OpenJDK.
- Instale Maven 3.9.8 o posterior.
- Asegúrese de que de Git esté instalado.
Inicio de sesión en Azure
Inicie sesión en su suscripción de Azure con el comando az login
y siga las instrucciones en 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 tiene varios inquilinos de Azure asociados a sus credenciales de Azure, debe especificar en qué inquilino desea iniciar sesión. Puede especificar el inquilino mediante la opción --tenant
; por ejemplo, az login --tenant contoso.onmicrosoft.com
.
Si tiene varias suscripciones dentro de un solo tenant, asegúrese de haber iniciado sesión con la suscripción que desea usar utilizando az account set --subscription <subscription-id>
.
Creación de un grupo de recursos
Un grupo de recursos de Azure es un grupo lógico en el que se implementan y administran los recursos de Azure.
Cree un grupo de recursos denominado java-liberty-project
mediante el comando az group create
en la ubicación de eastus2
. 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 eastus2
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
es único en Azure.
Nota
En este artículo se usa el mecanismo de autenticación sin contraseña recomendado para Container Registry. Todavía es posible usar un nombre de usuario y una contraseña con docker login
después de usar az acr credential show
para obtener el nombre de usuario y la contraseña. El uso de un nombre de usuario y una contraseña es menos seguro que la autenticación sin contraseña.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
Después de un breve tiempo, debería ver una salida JSON que contenga las siguientes líneas:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
A continuación, use el siguiente comando para recuperar el servidor de inicio de sesión de la instancia de Container Registry. Necesitará este valor al implementar la imagen de aplicación en Azure Container Apps más adelante.
export ACR_LOGIN_SERVER=$(az acr show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
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 \
--name $ACA_ENV
Si se le pide que instale una extensión, responda Y.
Después de un breve tiempo, debería ver una salida JSON que contenga las siguientes líneas:
"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",
Creación de una base de datos única en Azure SQL Database
En esta sección, creará una base de datos única en Azure SQL Database para usarla con la aplicación.
En primer lugar, use los siguientes comandos para establecer variables de entorno relacionadas con la base de datos. Reemplace <your-unique-sql-server-name>
por un nombre único para el servidor de Azure SQL Database.
export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb
A continuación, use los siguientes comandos para crear una base de datos única en Azure SQL Database y establecer el usuario que ha iniciado sesión actual como administrador de Microsoft Entra. Para más información, consulte inicio rápido de : Creación de una base de datos única en Azure SQL Database.
export ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)
az sql server create \
--name $SQL_SERVER_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--enable-ad-only-auth \
--external-admin-principal-type User \
--external-admin-name $ENTRA_ADMIN_NAME \
--external-admin-sid $(az ad signed-in-user show --query id --output tsv)
az sql db create \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name $DB_NAME \
--edition GeneralPurpose \
--compute-model Serverless \
--family Gen5 \
--capacity 2
A continuación, use los siguientes comandos para agregar la dirección IP local a las reglas de firewall del servidor de Azure SQL Database para permitir que la máquina local se conecte a la base de datos para realizar pruebas locales más adelante.
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
Nota
Cree un servidor de Azure SQL con la autenticación de SQL deshabilitada por razones de seguridad. Solo microsoft Entra ID se usa para autenticarse en el servidor. Si necesita habilitar la autenticación de SQL, consulte az sql server create
.
Configuración y compilación de la imagen de aplicación
Para implementar y ejecutar su aplicación Liberty en Azure Container Apps, containerice su aplicación como una imagen de Docker usando imágenes de contenedor de Open Liberty.
Siga los pasos de esta sección para implementar la aplicación de ejemplo en el entorno de ejecución de Liberty. Estos pasos usan Maven.
Consulte la aplicación.
Use los siguientes comandos para preparar el código de ejemplo para 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
export BASE_DIR=$PWD
git checkout 20241118
Si ve un mensaje sobre estar en el estado detached HEAD
, puede ignorar este mensaje de manera segura. Solo significa que ha extraído una etiqueta del repositorio.
En este artículo se usa java-app. Esta es la estructura de archivos de los archivos importantes de la aplicación:
java-app
├─ src/main/
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml
├─ pom-azure-identity.xml
Los directorios java, recursosy 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 de 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. Define una variable azure.sql.connectionstring
que se usa para conectarse a Azure SQL Database.
El archivo pom.xml es el archivo del modelo de objetos de proyecto (POM) de Maven que contiene la información de configuración del proyecto. El archivo pom-azure-identity.xml declara la dependencia azure-identity
, que se usa para autenticarse en los servicios de Azure mediante el identificador de Microsoft Entra.
Nota
En este ejemplo se usa la librería azure-identity
para autenticarse en Azure SQL Database mediante la autenticación de Microsoft Entra, lo cual se recomienda por razones de seguridad. Si necesita usar la autenticación de SQL en la aplicación Liberty, consulte conexiones de base de datos relacionales con JDBC.
Construir el proyecto
Use los comandos siguientes para compilar la aplicación:
cd $BASE_DIR/java-app
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources
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 y resuelva el problema antes de continuar.
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 el liberty-maven-plugin
. Para obtener más información sobre el liberty-maven-plugin
, consulte Creación de una aplicación web con Maven. Para su aplicación, puede hacer algo similar utilizando cualquier otro mecanismo, como su IDE local.
Nota
Si seleccionó una implementación de base de datos "sin servidor", compruebe que la base de datos SQL no entró en modo de pausa. Una manera de realizar la comprobación es iniciar sesión en el editor de consultas de base de datos, tal como se describe en Inicio rápido: Uso del editor de consultas de Azure Portal (versión preliminar) para consultar Azure SQL Database.
Inicie la aplicación mediante
liberty:run
.cd $BASE_DIR/java-app # The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by the configuration variable azure.sql.connectionstring in server.xml. export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault" mvn liberty:run
Compruebe que la aplicación funciona según lo previsto. Si se ejecuta correctamente, debería ver un mensaje similar a
[INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds.
en la salida del comando. Vaya ahttp://localhost:9080/
en el explorador para comprobar que la aplicación es accesible y que todas las funciones funcionan.Presione Ctrl+C para detener. Seleccione Y si se le pide que finalice el trabajo por lotes.
Cuando haya terminado, elimine la regla de firewall que permite que la dirección IP local acceda a Azure SQL Database mediante el comando siguiente:
az sql server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP
Construir la imagen para la implementación de Azure Container Apps
Ahora puede ejecutar el comando az acr build
para compilar la imagen, como se muestra en el ejemplo siguiente:
cd $BASE_DIR/java-app
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
El comando az acr build
carga los artefactos especificados en dockerfile en la instancia de Container Registry, compila la imagen y la almacena en la instancia de Container Registry.
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-identity system \
--target-port 9080 \
--ingress 'external' \
--min-replicas 1
La salida correcta es un objeto JSON que incluye la propiedad "type": "Microsoft.App/containerApps"
.
A continuación, conecte el servidor de Azure SQL Database a la aplicación contenedora mediante Service Connector mediante los pasos siguientes:
En este ejemplo se usa Service Connector para facilitar la conexión a la base de datos. Para más información sobre Service Connector, consulte ¿Qué es Service Connector? Instale la extensión sin contraseña para la CLI de Azure mediante el comando siguiente:
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
Conecte la base de datos a la aplicación contenedora con una identidad administrada asignada por el sistema mediante el comando siguiente:
az containerapp connection create sql \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACA_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $ACA_NAME \ --client-type java
La salida correcta es un objeto JSON que incluye la propiedad
"type": "microsoft.servicelinker/linkers"
.
Nota
Service Connector crea un secreto en la aplicación contenedora que contiene el valor de AZURE_SQL_CONNECTIONSTRING
, que es una cadena de conexión sin contraseña a Azure SQL Database. Para obtener más información, consulte el valor de ejemplo de la sección identidad administrada asignada por el usuario de Integración de Azure SQL Database con Service Connector.
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)
Para acceder a la aplicación y probarla, abra un explorador web en la dirección URL. En la captura de pantalla siguiente se muestra la aplicación en ejecución:
Limpieza de recursos
Para evitar cargos de Azure, debe limpiar los recursos innecesarios. Cuando el clúster ya no sea necesario, use el comando az group delete
para quitar el grupo de recursos, el registro de contenedor, las aplicaciones de contenedor, el servidor de bases de datos y todos los recursos relacionados.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Pasos siguientes
Puede obtener más información en las referencias que se usan en esta guía:
- Azure Container Apps
- Integración de Azure SQL Database con Service Connector
- Conéctate usando la autenticación de Microsoft Entra
- Open Liberty
- Configuración del servidor de Open Liberty
- Liberty Maven Plugin
- Imágenes de contenedores de Open Liberty
- WebSphere Liberty Container Images
Para explorar las opciones para ejecutar productos de WebSphere en Azure, consulte ¿Qué son las soluciones para ejecutar la familia de productos de WebSphere en Azure?