Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, se implementa una aplicación web Quarkusbasada en datos en Azure App Service con el servicio de base de datos relacional Azure Database for PostgreSQL. Azure App Service admite Java Standard Edition (Java SE) en un entorno de servidor Windows o Linux.
En este tutorial, aprenderá a:
- Cree una arquitectura segura de forma predeterminada para azure App Service y el servidor flexible de Azure Database for PostgreSQL.
- Protección de secretos de conexión mediante una identidad administrada y una referencia de Key Vault.
- Implemente una aplicación de Ejemplo Deus en App Service desde un repositorio de GitHub.
- Acceda a la configuración de la aplicación de App Service en el código de la aplicación.
- Realice actualizaciones y vuelva a implementar el código de la aplicación.
- Genere el esquema de la base de datos mediante la ejecución de migraciones de bases de datos.
- Transmitir registros de diagnóstico desde Azure.
- Administre la aplicación en Azure Portal.
- Aprovisione la misma arquitectura e impleméntela usando Azure Developer CLI.
- Optimice su flujo de trabajo de desarrollo con GitHub Codespaces y GitHub Copilot.
Prerrequisitos
- Una cuenta de Azure con una suscripción activa. Si no tiene una cuenta de Azure, puede crearla gratis.
- Una cuenta de GitHub. También puede obtener una gratis.
- Conocimientos de Java con el desarrollo de Tomcat.
- (Opcional) Para probar GitHub Copilot, una cuenta de GitHub Copilot. Hay disponible una evaluación gratuita de 30 días.
- Una cuenta de Azure con una suscripción activa. Si no tiene una cuenta de Azure, puede crearla gratis.
- Una cuenta de GitHub. También puede obtener una gratis.
- Azure Developer CLI instalado. Puede seguir los pasos con Azure Cloud Shell porque ya tiene instalado Azure Developer CLI.
- Conocimientos de Java con el desarrollo de Tomcat.
- (Opcional) Para probar GitHub Copilot, una cuenta de GitHub Copilot. Hay disponible una evaluación gratuita de 30 días.
Ir al final
Si solo quiere ver la aplicación de ejemplo en este tutorial que se ejecuta en Azure, solo tiene que ejecutar los siguientes comandos en Azure Cloud Shell y seguir el aviso:
mkdir msdocs-quarkus-postgresql-sample-app
cd msdocs-quarkus-postgresql-sample-app
azd init --template msdocs-quarkus-postgresql-sample-app
azd up
1. Ejecución del ejemplo
En primer lugar, configurará una aplicación controlada por datos de ejemplo como punto inicial. Para mayor comodidad, el repositorio de ejemplo, Hibernate ORM con Panache y RESTEasy, incluye una configuración de contenedor de desarrollo. El contenedor de desarrollo tiene todo lo que necesita para desarrollar una aplicación, incluida la base de datos, la caché y todas las variables de entorno necesarias para la aplicación de ejemplo. El contenedor de desarrollo puede ejecutarse en un codespace de GitHub, lo que significa que puede ejecutar el ejemplo en cualquier equipo con un explorador web.
Paso 1: en una nueva ventana del navegador:
- Inicie sesión en su cuenta de GitHub.
- Vaya a https://github.com/Azure-Samples/msdocs-quarkus-postgresql-sample-app/fork.
- Anule la selección de Copiar solo la rama principal. Quiere todas las ramas.
- Seleccione Crear bifurcación.
Paso 2: en la bifurcación de GitHub:
- Seleccione Principal>starter-no-infra para la rama de inicio. Esta rama contiene solo el proyecto de ejemplo y ninguna configuración ni archivo relacionados con Azure.
- Seleccione Código>Crear codespace on starter-no-infra. El codespace tarda unos minutos en configurarse.
Paso 3: En el terminal de codespace:
- Ejecute
mvn quarkus:dev. - Ignorar la notificación
Your application running on port 5005 is available. - Cuando vea la notificación
Your application running on port 8080 is available., seleccione Abrir en explorador. Debería ver la aplicación de ejemplo en una nueva pestaña del explorador. Para detener el servidor de desarrollo de Quarkus, escribaCtrl+C.
Para obtener más información sobre cómo se crea la aplicación de ejemplo Quarkus, consulte la documentación de Quarkus Hibernate ORM simplificado con Panache y Configurar orígenes de datos en Quarkus.
Sugerencia
Puede preguntar a GitHub Copilot sobre este repositorio. Por ejemplo:
- @workspace ¿Qué hace este proyecto?
- @workspace ¿Qué hace la carpeta .devcontainer?
¿Tiene problemas? Consulte la sección Solución de problemas.
2. Creación de una instancia de App Service y PostgreSQL
En este paso, creará los recursos de Azure. Los pasos que se usan en este tutorial crean un conjunto de recursos seguros de forma predeterminada que incluyen App Service y Azure Database for PostgreSQL. En el proceso de creación, especifique lo siguiente:
- El Nombre de la aplicación web. Se usa como parte del nombre DNS de la aplicación en forma de
https://<app-name>-<hash>.<region>.azurewebsites.net. - La región para ejecutar la aplicación físicamente en el mundo. También se usa como parte del nombre DNS de la aplicación.
- La pila en tiempo de ejecución para la aplicación. Aquí es donde selecciona la versión de Java que se va a usar para la aplicación.
- El plan de hospedaje para la aplicación. Es el plan de tarifa que incluye el conjunto de características y la capacidad de escalado de la aplicación.
- El Grupo de recursos de la aplicación. Un grupo de recursos permite agrupar (en un contenedor lógico) todos los recursos de Azure necesarios para la aplicación.
Inicie sesión en Azure Portal y siga estos pasos para crear los recursos de Azure App Service.
Paso 1: En el portal Azure:
- En la barra de búsqueda superior, escriba app service.
- Seleccione el elemento con la etiqueta App Service en el encabezado Servicios.
- Seleccione Crear>Aplicación web. También puede ir directamente al asistente de creación.
Paso 2: Configurar la nueva aplicación Rellene el formulario como se indica a continuación.
- Nombre: msdocs-quarkus-postgres. Se genera automáticamente un grupo de recursos denominado msdocs-quarkus-postgres_group.
- Pila en tiempo de ejecución: Java 21.
- Pila de servidores web de Java: Java SE (Servidor web insertado).
- Sistema operativo: Linux.
- Región: cualquier región de Azure cercana a usted.
- Plan de Linux: cree nuevo y use el nombre msdocs-quarkus-postgres.
- Plan de precios: Basic B1. Cuando esté listo, puede escalar verticalmente a un plan de tarifa distinto.
Paso 3: agregar base de datos
- Seleccione la pestaña Base de datos .
- Seleccione Crear una base de datos.
- En Motor, seleccione PostgreSQL: servidor flexible. El nombre del servidor y el nombre de la base de datos se establecen de manera predeterminada en los valores adecuados.
Paso 4: configuración de la implementación de GitHub
- Seleccione la pestaña Implementación .
- Seleccione implementación continua.
- Si es la primera vez que configura la implementación de GitHub en App Service, seleccione Autorizar y autenticarse con su cuenta de GitHub.
- En Organización, seleccione el alias de GitHub.
- En Repositorio, seleccione msdocs-quarkus-postgresql-sample-app.
- En Rama, seleccione starter-no-infra.
- Seleccione Revisar + crear.
- Una vez completada la validación, seleccione Crear. De forma predeterminada, el asistente para crear crea una identidad asignada por el usuario para que el flujo de trabajo se autentique mediante la autenticación de Microsoft Entra (OIDC). Para obtener opciones de autenticación alternativas, consulte Implementación en App Service mediante Acciones de GitHub.
Step 3: la implementación tarda unos minutos en completarse. Una vez completada la implementación, seleccione el botón Ir al recurso. Se le dirigirá directamente a la aplicación App Service, pero se crean los siguientes recursos:
- Grupo de recursos: contenedor para todos los recursos creados.
- Plan de App Service: define los recursos de proceso de App Service. Se crea un plan de Linux en el nivel Básico.
- App Service: representa su aplicación y se ejecuta en el plan de App Service.
- Red virtual: se integra con la aplicación App Service y aísla el tráfico de back-end.
- Servidor flexible de Azure Database for PostgreSQL: accesible solo desde dentro de la red virtual. Una base de datos y un usuario se crean automáticamente en el servidor.
- Zonas DNS privadas: Permite la resolución DNS del almacén de claves y del servidor de base de datos en la red virtual.
3. Protección de secretos de conexión
El Asistente para la creación generó automáticamente las variables de conectividad como valores de configuración de la aplicación. Sin embargo, el procedimiento recomendado de seguridad es mantener completamente los secretos fuera de App Service. Moverá los secretos a un almacén de claves y cambiará la configuración de la aplicación a referencias de Key Vault con la ayuda de Service Connectors.
Paso 1: Recuperación de la cadena de conexión existente
- En el menú de la izquierda de la página App Service, seleccione Configuración > Variables de entorno.
- Seleccione Cadenas de conexión.
- Seleccione AZURE_POSTGRESQL_CONNECTIONSTRING.
- En Agregar o editar configuración de la aplicación, en el campo Valor, busque las partes Id. de usuario= y Contraseña= al final de la cadena.
- Copie las cadenas de nombre de usuario y contraseña después de User Id= y Password= para su uso más adelante. Esta configuración de aplicación le permite conectarse a la base de datos Postgres protegida tras un punto de conexión privado. Sin embargo, el secreto se guarda directamente en la aplicación de App Service, que no es lo mejor. Vas a cambiar esto.
Paso 2: Creación de una subred para proteger Key Vault La red virtual ya tiene dos subredes existentes, pero una ya está delegada en App Service y la otra ya está delegada en Azure Database for PostgreSQL. Cree otra para el acceso seguro a Key Vault con un punto de conexión privado (para obtener más información, consulte Seguridad de red para Azure Key Vault).
- En el menú izquierdo de la página App Service, seleccione la pestaña Información general.
- Seleccione el grupo de recursos de la aplicación.
- Red virtual en el mismo grupo de recursos.
- En el menú izquierdo de la red virtual, seleccione Subredes de configuración>.
- Seleccione + Subred.
- En Nombre, escriba subnet-keyvault. Acepte los valores predeterminados.
- Selecciona Agregar.
Paso 3: Creación de un almacén de claves para la administración segura de secretos
- En la barra de búsqueda superior, escriba "almacén de claves" y, a continuación, seleccione Marketplace>Key Vault.
- En Grupo de recursos, seleccione msdocs-quarkus-postgres_group.
- En Nombre del almacén de claves, escriba un nombre que consta de solo letras y números.
- En Región, establézcalo en la misma ubicación que el grupo de recursos.
Paso 4: protección del almacén de claves con un punto de conexión privado
- Seleccione la pestaña Redes.
- Anule la selección de Habilitar acceso público.
- Seleccione Crear un punto de conexión privado.
- En Grupo de recursos, seleccione msdocs-quarkus-postgres_group.
- En el cuadro de diálogo, en Ubicación, seleccione la misma ubicación que la aplicación de App Service.
- En Nombre, escriba msdocs-healthus-postgresVaultEndpoint.
- En red virtual, seleccione vnet-xxxxxxx.
- En Subred, subnet-keyvault.
- Selecciona Aceptar.
- Seleccione Revisar y crear y, luego, Crear. Espere a que finalice la implementación del almacén de claves. Deberías ver "Tu implementación ha sido completada".
Paso 5: creación de un conector de PostgreSQL
- En la barra de búsqueda superior, escriba msdocs-quarkus-postgres y, a continuación, seleccione el recurso de App Service denominado msdocs-quarkus-postgres.
- En la página App Service, en el menú de la izquierda, seleccione Configuración > Conector de servicio > Crear.
- En Tipo de servicio, seleccione Servidor flexible de DB for PostgreSQL.
- En el Servidor flexible de PostgreSQL, msdocs-quarkus-postgres-server ya debe seleccionarse.
- En la base de datos PostgreSQL, seleccione msdocs-milisegundous-postgres-database.
- En Tipo de cliente, seleccione Java.
Paso 6: guardar secretos en el almacén de claves
- Seleccione la pestaña Autenticación.
- Seleccione Cadena de conexión.
- En Nombre de usuario y Contraseña, pegue la contraseña que copió anteriormente.
- Seleccione Guardar secreto en Key Vault.
- En Conexión de Key Vault, seleccione Crear nuevo. Se abre un cuadro de diálogo Crear conexión encima del cuadro de diálogo de edición.
Paso 7: establecimiento de la conexión de Key Vault
- En el cuadro de diálogo Crear conexión para la conexión de Key Vault, en Key Vault, seleccione el almacén de claves que ha creado antes.
- En Tipo de cliente, seleccione Java para mantener la coherencia. En realidad, el código de la aplicación no usa el almacén de claves directamente.
- Seleccione Revisar + crear.
- Cuando se complete la validación, seleccione Crear.
Paso 8: finalización de la configuración del conector de PostgreSQL
- Vuelve al cuadro de diálogo de edición del conector de PostgreSQL. En la pestaña Autenticación, espere a que se cree el conector del almacén de claves. Cuando haya terminado, la lista desplegable Conexión de Key Vault la selecciona automáticamente.
- Seleccione Revisar + crear.
- Cuando se complete la validación, seleccione Crear. Espere hasta que aparezca la notificación Creación correcta.
Paso 9: comprobar la integración de Key Vault
- En el menú de la izquierda, vuelva a seleccionar Configuración > Variables de entorno.
- Junto a AZURE_POSTGRESQL_CONNECTIONSTRING, seleccione Mostrar valor. El valor debe ser
@Microsoft.KeyVault(...), lo que significa que es una referencia a un almacén de claves porque el secreto ahora se administra en el almacén de claves.
Paso 10: eliminación de credenciales de base de datos de App Service
- Seleccione la pestaña Cadenas de conexión.
- A la derecha de AZURE_POSTGRESQL_CONNECTIONSTRING, seleccione Eliminar. Recuerde que el asistente para crear creó esta cadena de conexión por usted al principio.
En resumen, el proceso para asegurar los secretos de conexión incluye:
- Recuperar los secretos de conexión de las variables de entorno de la aplicación de App Service.
- Creación de un almacén de claves con un punto de conexión privado.
- Crear una conexión de Key Vault con la identidad administrada asignada por el sistema.
- Cree un conector de servicio para almacenar los secretos de conexión en el almacén de claves.
- Elimine los secretos de conexión antiguos de la aplicación de App Service.
¿Tiene problemas? Consulte la sección Solución de problemas.
4. Implantación del código de ejemplo
En el asistente para crear, ya configuró la implementación continua desde el repositorio de GitHub de ejemplo mediante Acciones de GitHub. Es solo una de las muchas maneras de implementar en App Service, pero también una excelente manera de disponer de integración continua en el proceso de implementación. De forma predeterminada, cada git push en tu repositorio de GitHub inicia la acción de compilación e implementación.
Tenga en cuenta lo siguiente:
- Quarkus escucha el puerto 8080 de forma predeterminada. En producción, debe configurarse para escuchar el puerto especificado por la
PORTvariable de entorno en App Service. - El paquete de Java implementado debe ser un Uber-Jar.
- Para simplificar el tutorial, deshabilitará las pruebas durante el proceso de implementación. Los ejecutores de Acciones de GitHub no tienen acceso a la base de datos PostgreSQL en Azure, por lo que se producirá un error en las pruebas de integración que requieran acceso a la base de datos, como es el caso de la aplicación de ejemplo Quarkus.
Paso 1: De nuevo en el espacio de código de GitHub de la bifurcación de ejemplo, ejecute git pull origin starter-no-infra.
Esto extrae el archivo de flujo de trabajo de GitHub recién confirmado en el espacio de código.
Paso 2 (opción 1: con GitHub Copilot):
- Inicie una nueva sesión de chat al seleccionar la vista Chat y, después, seleccionar +.
- Pregunte: "@workspace ¿Cómo se conecta la aplicación a la base de datos?"Copilot podría proporcionarle una explicación sobre cómo se configuran los valores del origen de datos Deus en src/main/resources/application.properties.
- Por ejemplo, "@workspace he creado un conector de servicio PostgreSQL en Azure App Service mediante el tipo de cliente java y el nombre de la configuración de la aplicación es AZURE_POSTGRESQL_CONNECTIONSTRING. Quiero usar esta cadena de conexión cuando la aplicación se ejecuta en producción". Copilot puede proporcionarle una sugerencia de código similar a la de la opción 2: sin los pasos de GitHub Copilot que se indican a continuación e incluso decirle que realice el cambio en el archivo src/main/resources/application.properties.
- Abra src/main/resources/application.properties en el explorador y agregue la sugerencia de código.
- Por ejemplo, "@workspace ¿Cómo puedo configurar este proyecto para crear un Uber Jar?" Copilot puede proporcionarle una sugerencia de código similar a la de la opción 2: sin los pasos de GitHub Copilot que se indican a continuación e incluso decirle que realice el cambio en el archivo src/main/resources/application.properties.
- Abra src/main/resources/application.properties en el explorador y agregue la sugerencia de código.
- Por ejemplo, "¿@workspace Cómo uso el puerto de App Service?" Copilot puede proporcionarle una sugerencia de código similar a la de la opción 2: sin los pasos de GitHub Copilot que se indican a continuación e incluso decirle que realice el cambio en el archivo src/main/resources/application.properties.
- Abra src/main/resources/application.properties en el explorador y agregue la sugerencia de código. GitHub Copilot no proporciona la misma respuesta cada vez y no siempre esta es correcta. Es posible que tenga que formular más preguntas para ajustar su respuesta. Para obtener sugerencias, consulte ¿Qué puedo hacer con GitHub Copilot en mi espacio de código?.
Paso 2 (opción 2: sin GitHub Copilot):
- Abra src/main/resources/application.properties en el explorador. Quarkus usa este archivo para cargar las propiedades de Java.
- Quite la marca de comentario de las líneas 10-12. Esta configuración usa la configuración de la aplicación que creó con el conector de PostgreSQL, crea un Uber Jar y establece el puerto en el que usa App Service.
Paso 3 (opción 1: con GitHub Copilot):
- Pregunte: "@workspace Para la implementación de Acciones de GitHub, quiero omitir las pruebas para evitar errores relacionados con la base de datos". Copilot puede proporcionarle una sugerencia de código similar a la de la opción 2: sin los pasos de GitHub Copilot que se indican a continuación e incluso indicarle que realice el cambio en el archivo .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml.
- Abra .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml en el explorador y agregue la sugerencia de código. Para obtener sugerencias, consulte ¿Qué puedo hacer con GitHub Copilot en mi espacio de código?.
Paso 3 (opción 2: sin GitHub Copilot):
- Abra .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml en el explorador. Este es el flujo de trabajo de Acciones de GitHub que creó el asistente para crear automáticamente.
- Busque el
Build with Mavenpaso, y modifique elruncomando amvn clean install -DskipTests.-DskipTestsindica a Maven que omita las pruebas para que la implementación no produzca errores en las bases de datos. El contenedor de Acciones de GitHub no se puede conectar a un servidor postgreSQL.
Paso 4:
- Seleccione la extensión Control de código fuente.
- En el cuadro de texto, escriba un mensaje de confirmación, por ejemplo,
Configure DB and deployment. O bien, seleccione
y deje que GitHub Copilot genere un mensaje de confirmación de manera automática. - Seleccione Confirmar y, a continuación, confirme con Sí.
- Seleccione Sincronización de cambios 1 y confirme con Aceptar.
Paso 5:
- En el menú de la izquierda, seleccione el registros deImplementación>Centro de implementación>.
- En el elemento de registro de la ejecución de implementación, seleccione la entrada Registros de compilación/implementación con la marca de tiempo más reciente.
Paso 6: Se le llevará al repositorio de GitHub, donde verá que la acción de GitHub se está ejecutando. El archivo de flujo de trabajo define dos fases independientes: compilación e implementación. Espere a que la ejecución en GitHub muestre el estado Éxito. Tardará unos 5 minutos.
¿Tiene problemas? Consulte la sección Solución de problemas.
5. Navegación hasta la aplicación
Paso 1. En la página App Service:
- En el menú de la izquierda, seleccione Información general.
- Seleccione la dirección URL de la aplicación.
Paso 2: Agregue algunas frutas a la lista. Enhorabuena, ya está ejecutando una aplicación web en Azure App Service, con conectividad protegida a Azure Database for PostgreSQL.
6. Transmisión de registros de diagnóstico
Azure App Service captura toda la salida de mensajes hacia la consola, para ayudarle a diagnosticar problemas de la aplicación. La aplicación de ejemplo incluye instrucciones de registro de JBoss estándar para demostrar esta funcionalidad, como se muestra a continuación.
private static final Logger LOGGER = Logger.getLogger(FruitEntityResource.class.getName());
@GET
public List<FruitEntity> get() {
LOGGER.info("In FruitEntityResource.get()");
return FruitEntity.listAll(Sort.by("name"));
}
Paso 1. En la página App Service:
- En el menú de la izquierda, seleccione Supervisión>Registros de App Service.
- En Registro de aplicaciones, seleccione Sistema de archivos.
- En el menú superior, elija Guardar.
Paso 2: en el menú de la izquierda, seleccione Flujo de registro. Verá los registros de la aplicación, incluidos los registros de plataforma y los registros de dentro del contenedor.
Para obtener más información sobre el registro de aplicaciones Java en la serie, consulte Habilitación de Azure Monitor OpenTelemetry para aplicaciones de .NET, Node.js, Python y Java.
7. Limpieza de recursos
Cuando acabe, puede eliminar todos los recursos de la suscripción de Azure mediante la eliminación del grupo de recursos.
Paso 1: en la barra de búsqueda de la parte superior de Azure Portal:
- Escriba el nombre del grupo de recursos.
- Seleccione el grupo de recursos.
Paso 2: en la página del grupo de recursos, seleccione Borrar grupo de recursos.
Paso 3:
- Escriba el nombre del grupo de recursos para confirmar la eliminación.
- Seleccione Eliminar.
- Confirme con Eliminar de nuevo.
2. Creación de recursos de Azure e implementación de una aplicación de ejemplo
En este paso, creará los recursos de Azure e implementará una aplicación de ejemplo en App Service en Linux. Los pasos que se usan en este tutorial crean un conjunto de recursos seguros de forma predeterminada que incluyen App Service y Azure Database for PostgreSQL.
El contenedor de desarrollo ya tiene Azure Developer CLI (AZD).
Desde la raíz del repositorio del espacio de código de GitHub, ejecute
azd init.azd init --template javase-app-service-postgresql-infraCuando se le solicite, proporcione las siguientes respuestas:
Pregunta Respuesta El directorio actual no está vacío. ¿Desea inicializar un proyecto aquí en "<su directorio>"? S ¿Qué quiere hacer con estos archivos? Mantener mis archivos existentes sin cambios Escribir un nuevo nombre de entorno Escriba un nombre único. La plantilla de AZD usa este nombre como parte del nombre DNS de la aplicación web en Azure ( <app-name>-<hash>.azurewebsites.net). Se permiten caracteres alfanuméricos y guiones.Inicie sesión en Azure mediante la ejecución del comando
azd auth loginy siga la solicitud:azd auth loginCree los recursos de Azure necesarios con el comando
azd provision. Siga la solicitud para seleccionar la suscripción y la ubicación deseadas para los recursos de Azure.azd provisionEl comando
azd provisiontarda unos 15 minutos en completarse (la Redis Cache tarda más tiempo). Más adelante, modificarás el código para trabajar con App Service e implementarás los cambios conazd deploy. Mientras se ejecuta, el comando proporciona mensajes sobre el proceso de aprovisionamiento e implementación, incluido un vínculo a la implementación en Azure.Esta plantilla de AZD contiene archivos (azure.yaml y el directorio infra) que generarán una arquitectura segura de manera predeterminada con los siguientes recursos de Azure:
- Grupo de recursos: contenedor para todos los recursos creados.
- Plan de App Service: define los recursos de proceso de App Service. Se crea un plan de Linux en el nivel Básico.
- App Service: representa su aplicación y se ejecuta en el plan de App Service.
- Red virtual: se integra con la aplicación App Service y aísla el tráfico de back-end.
- Puntos de conexión privados: puntos de acceso al almacén de claves y a la caché Redis en la red virtual.
- Interfaces de red: representa direcciones IP privadas, una para cada uno de los puntos de conexión privados.
- Servidor flexible de Azure Database for PostgreSQL: accesible solo desde dentro de la red virtual. Una base de datos y un usuario se crean automáticamente en el servidor.
- Zona DNS privada: habilita la resolución DNS del servidor PostgreSQL en la red virtual.
- Área de trabajo de Log Analytics: actúa como contenedor de destino para que su aplicación envíe sus registros, donde también puede consultar los registros.
- Azure Cache for Redis: accesible solo desde detrás de su punto de conexión privado.
- Almacén de claves: accesible solo desde detrás de su punto de conexión privado. Se usa para administrar secretos para la aplicación de App Service.
Una vez finalizado el aprovisionamiento, busque la configuración
AZURE_POSTGRESQL_CONNECTIONSTRINGen la salida de AZD. Para mantener los secretos seguros, solo se muestran los nombres de configuración. Tienen este aspecto en la salida de AZD:App Service app has the following connection settings: - AZURE_POSTGRESQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPELa plantilla de AZD que usa ya ha generado las variables de conectividad como valores de la aplicación y las envía al terminal para mayor comodidad. La configuración de la aplicación es una forma de mantener los secretos de conexión fuera del repositorio de código. También puede encontrar el vínculo directo a la página de configuración de la aplicación para la aplicación de App Service creada.
¿Tiene problemas? Consulte la sección Solución de problemas.
3. Modificación del código de ejemplo y re implementación
Debe realizar algunos cambios en el código de la aplicación para que funcione con App Service:
- Quarkus escucha el puerto 8080 de forma predeterminada. En producción, debe configurarse para escuchar el puerto especificado por la
PORTvariable de entorno en App Service. - El paquete de Java implementado debe ser un Uber-Jar.
- Para simplificar el tutorial, deshabilitará las pruebas durante el proceso de implementación. Los ejecutores de Acciones de GitHub no tienen acceso a la base de datos PostgreSQL en Azure, por lo que se producirá un error en las pruebas de integración que requieran acceso a la base de datos, como es el caso de la aplicación de ejemplo Quarkus.
En el espacio de código de GitHub, inicie una nueva sesión de chat; para ello, seleccione la vista Chat y, a continuación, seleccione +.
Pregunte: "@workspace ¿Cómo se conecta la aplicación a la base de datos?". Copilot puede darle una explicación sobre cómo se configuran los valores del origen de datos de quarkus en src/main/resources/application.properties.
Por ejemplo, "@workspace he creado un conector de servicio PostgreSQL en Azure App Service mediante el tipo de cliente java y el nombre de la configuración de la aplicación es AZURE_POSTGRESQL_CONNECTIONSTRING. Quiero usar esta cadena de conexión cuando la aplicación se ejecuta en producción". Copilot puede proporcionarle una sugerencia de código similar a la de la opción 2: sin los pasos de GitHub Copilot que se indican a continuación e incluso decirle que realice el cambio en el archivo src/main/resources/application.properties.
Agregue la sugerencia de código en src/main/resources/application.properties.
Por ejemplo, "@workspace ¿Cómo puedo configurar este proyecto para crear un Uber Jar?" Copilot puede proporcionarle una sugerencia de código similar a la de la opción 2: sin los pasos de GitHub Copilot que se indican a continuación e incluso decirle que realice el cambio en el archivo src/main/resources/application.properties.
Agregue la sugerencia de código en src/main/resources/application.properties.
Por ejemplo, "¿@workspace Cómo uso el puerto de App Service?" Copilot puede proporcionarle una sugerencia de código similar a la de la opción 2: sin los pasos de GitHub Copilot que se indican a continuación e incluso decirle que realice el cambio en el archivo src/main/resources/application.properties.
Agregue la sugerencia de código en src/main/resources/application.properties.
GitHub Copilot no proporciona la misma respuesta cada vez y no siempre esta es correcta. Es posible que tenga que formular más preguntas para ajustar su respuesta. Para obtener sugerencias, consulte ¿Qué puedo hacer con GitHub Copilot en mi espacio de código?.
En el terminal, ejecute
azd deploy.azd deploy
¿Tiene problemas? Consulte la sección Solución de problemas.
5. Navegación hasta la aplicación
En la salida de AZD, busque la dirección URL de la aplicación y vaya a ella en el explorador. La dirección URL tiene este aspecto en la salida de AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
Agregue algunas frutas a la lista.
Enhorabuena, ya está ejecutando una aplicación web en Azure App Service, con conectividad protegida a Azure Database for PostgreSQL.
¿Tiene problemas? Consulte la sección Solución de problemas.
6. Transmisión de registros de diagnóstico
Azure App Service puede capturar registros de consola para ayudarle a diagnosticar problemas con la aplicación. Para mayor comodidad, la plantilla de AZD ya ha habilitado el registro en el sistema de archivos local y está enviando los registros a un área de trabajo de Log Analytics.
La aplicación de ejemplo incluye instrucciones de registro de JBoss estándar para demostrar esta funcionalidad, como se muestra a continuación.
private static final Logger LOGGER = Logger.getLogger(FruitEntityResource.class.getName());
@GET
public List<FruitEntity> get() {
LOGGER.info("In FruitEntityResource.get()");
return FruitEntity.listAll(Sort.by("name"));
}
En la salida de AZD, busque el vínculo para transmitir registros de App Service y vaya a él en el explorador. El vínculo tiene este aspecto en la salida de AZD:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Para obtener más información sobre el registro de aplicaciones Java en la serie, consulte Habilitación de Azure Monitor OpenTelemetry para aplicaciones de .NET, Node.js, Python y Java.
¿Tiene problemas? Consulte la sección Solución de problemas.
7. Limpieza de recursos
Para eliminar todos los recursos de Azure en el entorno de implementación actual, ejecute azd down y siga las indicaciones.
azd down
Solución de problemas
Error en la ejecución de Acciones de GitHub en la fase de compilación
Seleccione la fase de compilación con errores para ver qué paso ha fallado. Si se trata de la fase de compilación con Maven, expanda el paso para comprobar que se -DskipTests usa la opción. Si no es así, vuelva a 4. Implemente código de ejemplo y modifique el archivo de flujo de trabajo de GitHub según las instrucciones.
La aplicación no se pudo iniciar y muestra el siguiente error en el flujo de registro: "Las clases de modelo se definen para el valor predeterminado de la unidad de persistencia <predeterminada>, pero no se encontró el valor <predeterminado> del origen de datos configurado: no se creará EntityManagerFactory predeterminado."
Este error de Quarkus es muy probable porque la aplicación no se puede conectar a la base de datos de Azure. Asegúrese de que no se haya cambiado la configuración de la aplicación AZURE_POSTGRESQL_CONNECTIONSTRING y que application.properties esté usando correctamente la configuración de la aplicación.
La aplicación no se pudo iniciar y la secuencia de registro muestra "Esperando respuesta a la solicitud de preparación del contenedor"
Es probable que la aplicación no esté configurada para escuchar el puerto especificado por la variable de entorno de App Service PORT, por lo que no puede responder a ninguna solicitud. Si App Service no obtiene una respuesta de la aplicación, se supone que la aplicación no se pudo iniciar. Vuelve a 4. Implemente el código de ejemplo y compruebe que application.properties está configurado correctamente.
La aplicación funciona, pero veo el registro de errores "ERROR [org.acm.hib.orm.pan.ent.FruitEntityResource] (vert.x-eventloop-thread-0) Failed to handle request: jakarta.ws.rs.NotFoundException: HTTP 404 Not Found".
Se trata de un error Vert.x (consulte Arquitectura reactiva de Quarkus), que indica que el cliente ha solicitado una ruta de acceso desconocida. Puede ocurrir la primera vez que se inicia la aplicación, cuando el cliente solicita la API REST antes de que se produzca la migración de la base de datos Hibernate.
En App Service, este error también se produce en cada inicio de la aplicación porque App Service comprueba que la aplicación se inicia enviando una GET solicitud a /robots933456.txt.
Preguntas más frecuentes
- ¿Cuánto cuesta esta configuración?
- ¿Cómo me conecto al servidor de PostgreSQL protegido tras la red virtual con otras herramientas?
- ¿Cómo funciona el desarrollo de aplicaciones locales con Acciones de GitHub?
- ¿Qué ocurre si quiero ejecutar pruebas con PostgreSQL durante el flujo de trabajo de GitHub?
- No tengo permisos para crear una identidad asignada por el usuario
- ¿Qué puedo hacer con GitHub Copilot en mi codespace?
¿Cuánto cuesta esta configuración?
Los precios por los recursos creados son los siguientes:
- El plan de App Service se crea en el nivel Básico y puede escalar o reducirse verticalmente. Consulte Precios de App Service.
- PostgreSQL, servidor flexible se crea en el nivel ampliable más bajo (Standard_B1ms), con el tamaño de almacenamiento mínimo, que se puede escalar o reducir verticalmente. Consulte los precios de Azure Database for PostgreSQL.
- La red virtual no incurre en cargo alguno, a menos que se configure alguna funcionalidad extra, como, por ejemplo, el emparejamiento. Vea Precios de Azure Virtual Network.
- La zona DNS privada conlleva un pequeño cargo. Vea Precios de Azure DNS.
¿Cómo me conecto al servidor de PostgreSQL protegido tras la red virtual con otras herramientas?
- Para tener un acceso básico desde una herramienta de línea de comandos, puede ejecutar
psqldesde el terminal de SSH de la aplicación. - Para conectarse desde una herramienta de escritorio, la máquina debe estar en la red virtual. Por ejemplo, podría ser una máquina virtual de Azure conectada a una de las subredes, o una máquina de una red local que tenga una conexión VPN de sitio a sitio a la red virtual de Azure.
- También puede integrar Azure Cloud Shell en la red virtual.
¿Cómo funciona el desarrollo de aplicaciones locales con Acciones de GitHub?
Tomando como ejemplo el archivo de flujo de trabajo generado automáticamente de App Service: cada git push inicia una nueva ejecución de compilación e implementación. Desde un clon local del repositorio de GitHub, realiza las actualizaciones deseadas y las inserta en GitHub. Por ejemplo:
git add .
git commit -m "<some-message>"
git push origin main
¿Qué ocurre si quiero ejecutar pruebas con PostgreSQL durante el flujo de trabajo de GitHub?
La aplicación de ejemplo predeterminada de Quarkus incluye pruebas con conectividad de base de datos. Para evitar errores de conexión, ha agregado la propiedad -skipTests. Si lo desea, puede ejecutar las pruebas en un contenedor de servicios postgreSQL. Por ejemplo, en el archivo de flujo de trabajo generado automáticamente en la bifurcación de GitHub (.github/workflows/main_cephalin-quarkus.yml), realice los cambios siguientes:
Agregue el código YAML para el contenedor de PostgreSQL al trabajo de
build, como se muestra en el siguiente fragmento de código.... jobs: build: runs-on: ubuntu-latest # BEGIN CODE ADDITION container: ubuntu services: # Hostname for the PostgreSQL container postgresdb: image: postgres env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres POSTGRES_DB: postgres # Set health checks to wait until postgres has started options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 # END CODE ADDITION steps: - uses: actions/checkout@v4 ...container: ubuntuindica a GitHub que debe ejecutar el trabajo debuilden un contenedor. De este modo, la cadena de conexión del entorno de desarrollojdbc:postgresql://postgresdb:5432/postgrespuede funcionar tal cual cuando se ejecuta el flujo de trabajo. Para obtener más información sobre la conectividad de PostgreSQL en Acciones de GitHub, consulte Creación de contenedores de servicio de PostgreSQL.En el paso
Build with Maven, quite-DskipTests. Por ejemplo:- name: Build with Maven run: mvn clean install -Dquarkus.package.type=uber-jar
No tengo permisos para crear una identidad asignada por el usuario
Vea Configurar la implementación de GitHub Actions desde el Deployment Center.
¿Qué puedo hacer con GitHub Copilot en mi codespace?
Es posible que haya observado que la vista de chat de GitHub Copilot ya estaba allí cuando creó el codespace. Sin embargo, necesita una cuenta de GitHub Copilot (versión de prueba gratuita de 30 días disponible).
Algunas sugerencias para usted al hablar con GitHub Copilot:
- En una sola sesión de chat, las preguntas y respuestas se basan entre sí y puede ajustar sus preguntas para ajustar la respuesta que obtenga.
- De forma predeterminada, GitHub Copilot no tiene acceso a ningún archivo del repositorio. Para formular preguntas sobre un archivo, abra primero el archivo en el editor.
- Para permitir que GitHub Copilot tenga acceso a todos los archivos del repositorio al preparar sus respuestas, comience la pregunta con
@workspace. Para obtener más información, consulte Use the @workspace agent. - Durante la sesión de chat, GitHub Copilot puede sugerir cambios y (con
@workspace) incluso indicar dónde realizarlos, pero no está permitido que haga los cambios por ti. Es necesario agregar los cambios sugeridos y probarlos.
Pasos siguientes
Para obtener más información sobre la ejecución de aplicaciones Java en App Service, consulte la guía del desarrollador.
Obtenga información sobre cómo proteger la aplicación con un dominio personalizado y un certificado.