Tutorial: Implementación de una aplicación de ASP.NET Core y Azure SQL Database en Azure App Service

En este tutorial aprenderá a implementar una aplicación de ASP.NET Core basada en datos en Azure App Service y a conectarse a Azure SQL Database. También implementará un Azure Cache for Redis para habilitar el código de almacenamiento en caché en la aplicación. Azure App Service es un servicio de hospedaje web con gran capacidad de escalado y aplicación automática de revisiones que puede implementar fácilmente aplicaciones en Windows o Linux. Aunque en este tutorial se usa una aplicación de ASP.NET Core 7.0, el proceso es el mismo para otras versiones de ASP.NET Core y ASP.NET Framework.

Este tutorial requiere lo siguiente:

  • 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.

Aplicación de ejemplo

Para explorar la aplicación de ejemplo que se usa en este tutorial, descárguela del repositorio https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore o clónela mediante el siguiente comando de Git:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

1. Creación de App Service, base de datos y caché

En este paso, creará los recursos de Azure. Los pasos que se usan en este tutorial crean un conjunto de recursos seguros de manera predeterminada que incluyen App Service, Azure SQL Database y Azure Cache. En el proceso de creación especificará lo siguiente:

  • El Nombre de la aplicación web. Es el nombre que se usa como parte del nombre DNS de la aplicación web en el formato https://<app-name>.azurewebsites.net.
  • La región para ejecutar la aplicación físicamente en el mundo.
  • La pila en tiempo de ejecución para la aplicación. Es donde se selecciona la versión de .NET 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:

  1. Escriba "base de datos de aplicación web" en la barra de búsqueda de la parte superior de Azure Portal.
  2. Seleccione el elemento denominado Aplicación web + base de datos en el encabezado Marketplace. También puede ir directamente al asistente de creación.

Captura de pantalla que muestra cómo usar el cuadro de búsqueda de la barra de herramientas superior para encontrar el asistente de creación Aplicación web + base de datos

Paso 2: In the páginaCrear aplicación web + base de datos, rellene el formulario de la siguiente manera.

  1. Grupo de recursos → Seleccione Crear nuevo y use el nombre msdocs-core-sql-tutorial.
  2. Región → Cualquier región de Azure cercana.
  3. Nombremsdocs-core-sql-XYZ, donde XYZ son tres caracteres aleatorios. Este nombre debe ser único en Azure.
  4. Pila en tiempo de ejecución.NET 7 (STS).
  5. ¿Agregar Azure Cache for Redis?.
  6. Plan de hospedajeBásico. Cuando esté listo, puede escalar verticalmente a un plan de tarifa de producción más adelante.
  7. Seleccione SQLAzure como motor de base de datos. Azure SQL Database es un motor de base de datos de plataforma como servicio (PaaS) totalmente administrado que siempre se ejecuta en la versión estable más reciente de SQL Server.
  8. Seleccione Revisar + crear.
  9. Una vez completada la validación, seleccione Crear.

Captura de pantalla que muestra cómo configurar una aplicación y base de datos nuevas en el asistente Crear aplicación web + base de datos

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 de 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 red de back-end.
  • Puntos de conexión privados → puntos de conexión de Access para el servidor de bases de datos y la caché de Redis en la red virtual.
  • Interfaces de red → representa direcciones IP privadas, una para cada uno de los puntos de conexión privados.
  • Servidor de Azure SQL Database → accesible solo desde detrás del punto de conexión privado.
  • Azure SQL Database → Una base de datos y un usuario que se crean automáticamente en el servidor.
  • Azure Cache for Redis → accesible solo desde detrás de su punto de conexión privado.
  • Zonas de DNS privado → habilitar la resolución DNS del servidor de base de datos y la caché de Redis en la red virtual.

Captura de pantalla en la que se muestra el proceso completo de la implementación.

2. Comprobación de cadenas de conexión del dispositivo

El asistente para la creación generó cadenas de conexión para la base de datos SQL y la caché de Redis. En este paso, busque la cadena de conexión generada para más adelante.

Paso 1: En la página App Service, en el menú de la izquierda, seleccione Configuración.

Captura de pantalla que muestra cómo abrir la página de configuración de App Service

Paso 2:

  1. Desplácese hasta la parte inferior de la página y busque AZURE_SQL_CONNECTIONSTRING en la sección Cadenas de conexión . El asistente para la creación generó esta cadena a partir de la nueva base de datos SQL. Para configurar la aplicación, solo necesita este nombre.
  2. Además, busque AZURE_REDIS_CONNECTIONSTRING en la sección Configuración de la aplicación. El asistente para la creación generó esta cadena a partir de la nueva caché de Redis. Para configurar la aplicación, solo necesita este nombre.
  3. Si lo desea, puede seleccionar el botón Editar, situado a la derecha de cada configuración, y ver o copiar su valor. Más adelante, cambiará la aplicación para que use AZURE_SQL_CONNECTIONSTRING y AZURE_REDIS_CONNECTIONSTRING.

Captura de pantalla en la que se muestra cómo crear una configuración de aplicación

3. Implementación del código de ejemplo

En este paso, configurará la implementación de GitHub 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 uno de los repositorios git push de GitHub iniciará la acción de compilación e implementación.

Paso 1: En una nueva ventana del navegador:

  1. Inicie sesión en su cuenta de GitHub.
  2. Vaya a https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.
  3. Seleccione Bifurcación.
  4. Seleccione Crear bifurcación.

Captura de pantalla que muestra cómo crear una bifurcación del repositorio de GitHub de ejemplo

Paso 2: En la página App Service, en el menú de la izquierda, seleccione Centro de implementación.

Captura de pantalla que muestra cómo abrir el centro de implementación de App Service

Paso 3: En la página Centro de implementación:

  1. En Origen, seleccione GitHub. De forma predeterminada, Acciones de GitHub está seleccionado como proveedor de compilación.
  2. Inicie sesión en su cuenta de GitHub y siga las indicaciones para autorizar a Azure.
  3. En Organización, seleccione su cuenta.
  4. En Repositorio, seleccione msdocs-app-service-sqldb-dotnetcore.
  5. En Rama, seleccione main.
  6. En el menú superior, elija Guardar. App Service confirma un archivo de flujo de trabajo en el repositorio de GitHub escogido, en el directorio .github/workflows.

Captura de pantalla que muestra cómo configurar la CI/CD mediante Acciones de GitHub

Paso 4: Vuelva a la página de GitHub de la muestra bifurcada, abra Visual Studio Code en el navegador pulsando la tecla..

Captura de pantalla que muestra cómo abrir la experiencia de explorador de Visual Studio Code en GitHub

Paso 5: En Visual Studio Code en el navegador:

  1. Abra DotNetCoreSqlDb/appsettings.json en el explorador.
  2. Cambie el nombre de la cadena de conexión de MyDbConnection a AZURE_SQL_CONNECTIONSTRING, que coincide con la cadena de conexión creada anteriormente en App Service.

Captura de pantalla en la que se muestra el nombre de la cadena de conexión cambiado en appsettings.json.

Paso 6:

  1. Abra DotNetCoreSqlDb/Program.cs en el explorador.
  2. En el método options.UseSqlServer, cambie el nombre de la cadena de conexión de MyDbConnection a AZURE_SQL_CONNECTIONSTRING. Aquí es donde la aplicación de ejemplo usa la cadena de conexión.
  3. Quite el método builder.Services.AddDistributedMemoryCache(); y sustitúyalo con el siguiente código. Cambia el código del uso de una caché en memoria a la caché de Redis en Azure y lo hace mediante el uso de AZURE_REDIS_CONNECTIONSTRING anterior.
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});

Captura de pantalla en la que se muestra el nombre de la cadena de conexión cambiado en Program.cs.

Paso 7:

  1. Abra .github/workflows/main_msdocs-core-sql-XYZ en el explorador. El asistente para la creación de App Service creó este archivo.
  2. En el paso dotnet publish, agregue un paso para instalar la herramienta Entity Framework Core con el comando dotnet tool install -g dotnet-ef --version 7.0.14.
  3. En el nuevo paso, agregue otro paso para generar un lote de migración de base de datos en el paquete de implementación: dotnet ef migrations bundle --runtime linux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate. El paquete de migración es un archivo ejecutable independiente que se puede ejecutar en el entorno de producción sin necesidad del SDK de .NET. El contenedor de App Service de Linux solo tiene el entorno de ejecución de .NET y no el SDK de .NET.

Captura de pantalla en la que se muestran los pasos agregados al archivo de flujo de trabajo de GitHub para el lote de migración de base de datos.

Paso 8:

  1. Seleccione la extensión Control de código fuente.
  2. En el cuadro de texto, escriba un mensaje de confirmación, por ejemplo, Configure DB & Redis & add migration bundle.
  3. Seleccione Confirmar e insertar.

Captura de pantalla en la que se muestran los cambios que se confirman y se insertan en GitHub.

Paso 9: De vuelta en la página del Centro de implementación en Azure portal:

  1. Seleccione Registros. Ya se ha iniciado una nueva ejecución de implementación a partir de los cambios confirmados.
  2. 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.

Captura de pantalla que muestra cómo abrir registros de implementación en el centro de implementación

Paso 10: Se le llevará al repositorio de GitHub, donde ve 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 de GitHub muestre el estado Completado. Tarda algunos minutos.

Captura de pantalla que muestra una ejecución de GitHub en curso.

4. Generación del esquema de la base de datos

Con la instancia de SQL Database protegida por la red virtual, la manera más fácil de ejecutar migraciones de base de datos de dotnet es mediante una sesión SSH con el contenedor de App Service.

Paso 1: De vuelta en la página App Service, en el menú de la izquierda, seleccione SSH.

Captura de pantalla que muestra cómo abrir el shell de SSH de la aplicación desde Azure Portal

Paso 2: En el terminal SSH:

  1. Ejecute cd /home/site/wwwroot. Aquí están todos los archivos implementados.
  2. Ejecute el pack de migración generado por el flujo de trabajo de GitHub con ./migrate. Si se realiza correctamente, App Service se conecta correctamente a SQL Database. Cuando la aplicación se reinicie, solo persisten los cambios realizados en los archivos ubicados en /home. Los cambios efectuados fuera de /home no se conservan.

Captura de pantalla que muestra los comandos que se ejecutan en el shell de SSH y su salida correspondiente

5. Navegación hasta la aplicación

Paso 1. En la página App Service:

  1. En el menú de la izquierda, seleccione Información general.
  2. Seleccione la dirección URL de la aplicación. También puede navegar directamente a https://<app-name>.azurewebsites.net.

Captura de pantalla que muestra cómo iniciar una App Service desde Azure Portal

Paso 2: Añadir algunas tareas a la lista. Ya está ejecutando una aplicación de ASP.NET Core segura orientada a datos en Azure App Service.

Captura de pantalla de la aplicación de .NET Core ejecutándose en App Service.

Sugerencia

La aplicación de ejemplo implementa el patrón cache-aside. Cuando visita una vista de datos por segunda vez o vuelve a cargar la misma página después de realizar cambios en los datos, el tiempo de procesamiento de la página web muestra un tiempo mucho más rápido porque carga los datos desde la memoria caché en lugar desde la base de datos.

6. Transmisión de registros de diagnóstico

Azure App Service captura todos los mensajes registrados en la consola para ayudarle a diagnosticar problemas de la aplicación. La aplicación de ejemplo genera mensajes de registro de consola en cada uno de sus puntos de conexión para demostrar esta capacidad.

Paso 1. En la página App Service:

  1. En el menú de la izquierda, seleccione Registros de App Service.
  2. En Registro de aplicaciones, seleccione Sistema de archivos.

Captura de pantalla que muestra cómo habilitar los registros nativos en App Service en Azure Portal

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.

Captura de pantalla que muestra cómo ver la secuencia de registro en Azure Portal

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:

  1. Escriba el nombre del grupo de recursos.
  2. Seleccione el grupo de recursos.

Captura de pantalla que muestra cómo localizar un grupo de recursos y navegar hasta él en Azure Portal

Paso 2: En la página del grupo de recursos, seleccione Borrar grupo de recursos.

Captura de pantalla que muestra la ubicación del botón Eliminar grupo de recursos en Azure Portal

Paso 3:

  1. Escriba el nombre del grupo de recursos para confirmar la eliminación.
  2. Seleccione Eliminar.

Captura de pantalla del diálogo de confirmación para eliminar un grupo de recursos en Azure Portal. :

Preguntas más frecuentes

¿Cuánto cuesta esta configuración?

Los precios por la creación de los recursos 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.
  • La instancia de Azure SQL Database se crea en el nivel sin servidor de uso general en el hardware de la serie Estándar con el número mínimo de núcleos. Hay un pequeño costo y se puede distribuir a otras regiones. Puede minimizar el costo aún más reduciendo su tamaño máximo, o puede escalar verticalmente ajustando el nivel de servicio, el nivel de proceso, la configuración de hardware, el número de núcleos, el tamaño de la base de datos y la redundancia de zona. Consulte Precios de Azure SQL Database.
  • El Azure Cache for Redis se crea en el nivel Básico con el tamaño mínimo de caché. Hay un pequeño costo asociado a este nivel. Puede escalar verticalmente a niveles de rendimiento superiores para una mayor disponibilidad, agrupación en clústeres y otras características. Consulte Precios de Azure Cache for Redis.
  • 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 Azure SQL Database protegido tras la red virtual con otras herramientas?

  • Para tener un acceso básico desde una herramienta de línea de comandos, puede ejecutar sqlcmd desde el terminal de SSH de la aplicación. El contenedor de la aplicación no incluye sqlcmd, por lo que debe instalarlo manualmente. Recuerde que el cliente instalado no persiste en los reinicios de la aplicación.
  • Para conectarse desde un cliente de SQL Server Management Studio o desde Visual Studio, la máquina debe estar dentro de 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.

¿Cómo funciona el desarrollo de aplicaciones locales con Acciones de GitHub?

Tome 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, las actualizaciones deseadas se insertan en GitHub. Por ejemplo:

git add .
git commit -m "<some-message>"
git push origin main

¿Cómo se depuran los errores durante la implementación de Acciones de GitHub?

Si se produce un error en un paso en el archivo de flujo de trabajo de GitHub generado automáticamente, intente modificar el comando con errores para generar una salida más detallada. Por ejemplo, puede obtener más resultados de cualquiera de los comandos dotnet agregando la opción -v. Confirme e inserte los cambios para desencadenar otra implementación en App Service.

Pasos siguientes

Pase al tutorial siguiente para aprender a proteger la aplicación con un dominio personalizado y un certificado.

O bien, eche un vistazo a otros recursos:

Configure ASP.NET Core app (Configuración de una aplicación de ASP.NET Core)