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, aprenderá a implementar una aplicación de ASP.NET Core y SQL Database en Azure Container Apps mediante Visual Studio y Acciones de GitHub. También aprenderá a administrar migraciones y actualizaciones de bases de datos de Entity Framework en Acciones de GitHub, aunque los conceptos también se pueden aplicar a otras herramientas y entornos de CI/CD.
Prerrequisitos
Necesita tener instalado Visual Studio 2022 con las cargas de trabajo desarrollo de ASP.NET y desarrollo web y desarrollo de Azure.
Si ya ha instalado Visual Studio:
- Para instalar las actualizaciones más recientes en Visual Studio, seleccioneBuscar actualizaciones de >.
- Para comprobar que las cargas de trabajo de desarrollo web y desarrollo de ASP.NET ydesarrollo de Azure están instaladas, seleccione Herramientas>Obtener herramientas y características.
Advertencia
En este artículo se hace uso de cadenas de conexión. Tenga cuidado al administrar conexiones mediante nombres de usuario, contraseñas o claves de acceso. Estos secretos no se deben almacenar en el control de versiones ni colocarlos en ubicaciones no seguras a las que puedan acceder usuarios no autorizados. Durante el desarrollo local, normalmente se conectará a una base de datos local que no requiere almacenar secretos ni conectarse directamente a Azure. Durante la producción, conéctese a la base de datos de Azure SQL mediante un enfoque sin secretos , como Microsoft Entra ID siempre que sea posible.
Configuración local de la aplicación de ejemplo
Utiliza la aplicación de muestra TODO para seguir con este tutorial. Clone la aplicación desde GitHub mediante el comando siguiente:
git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore
Vaya a la carpeta del proyecto y abra la solución DotNetCoreSqlDb.sln
en Visual Studio.
La aplicación TODO está lista para usarse, pero deberá establecer una conexión con el localdb
SQL Server que está disponible en Visual Studio. La conexión a localdb
le permitirá ejecutar la aplicación y conservar las tareas pendientes mientras trabaja localmente.
- Haga clic con el botón derecho en el nodo Servicios conectados en el Explorador de soluciones de Visual Studio y seleccione Agregar > base de datos de SQL Server.
- En el cuadro de diálogo Conectarse a dependencias , seleccione SQL Server Express LocalDB (local) y, a continuación, seleccione Siguiente.
- En el cuadro de diálogo Conectar a SQL Server Express LocalDB (local), establezca los valores siguientes:
- Nombre de la cadena de conexión: Deje el valor predeterminado.
- Valor de cadena de conexión: Deje el valor predeterminado.
- Guarde el valor de la cadena de conexión en: Seleccione Ninguno.
- Seleccione Siguiente.
- En la pantalla Resumen de cambios , deje la configuración en sus valores predeterminados y seleccione Finalizar para completar el flujo de trabajo.
Visual Studio muestra un resumen de las dependencias del servicio, incluida la conexión a LocalDB
.
A continuación, deberá crear una migración inicial y usarla para actualizar la base de datos local con el esquema correcto para la aplicación TODO.
- Seleccione el icono ... situado a la derecha de la lista de dependencias de servicio junto a la
LocalDB
conexión y elija Agregar migración. - En el cuadro de diálogo de Migraciones de Entity Framework , espere un momento para que Visual Studio localice la clase
DbContext
que se incluye en el proyecto. Una vez cargados los valores, seleccione Finalizar. - Visual Studio genera una carpeta
Migrations
en el proyecto y crea una clase de migraciones inicial. Esta clase se puede usar para actualizar la base de datos con el esquema correcto. - Seleccione de nuevo el icono ... situado junto al
LocalDB
servicio y seleccione Actualizar base de datos. - En el cuadro de diálogo Migraciones de Entity Framework , espere un momento para que Visual Studio vuelva a buscar la
DbContext
clase y, a continuación, elija Finalizar. Visual Studio ejecuta la migración y crea el esquema de la base de datos en el servidor deLocalDB
.
Inicie el proyecto seleccionando el botón de ejecución DotNetCoreSqlDb en la parte superior de Visual Studio.
Cuando se cargue la aplicación, compruebe que la base de datos funciona correctamente escribiendo una nueva tarea pendiente. La tarea pendiente aparece en la vista de lista principal de la página principal de la aplicación.
Exploración de la configuración de inicio de la aplicación
La aplicación de ejemplo incluye el código siguiente en el archivo Program.cs
:
if(builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}
Este código aplica las siguientes configuraciones:
- Cuando la aplicación se ejecuta localmente, la cadena de conexión
localdb
se extrae del archivoappsettings.json
y se proporciona a Entity Framework. Esta configuración permite que la cadena de conexiónlocaldb
se registre en el control de código fuente, de modo que otros desarrolladores puedan conectarse fácilmente a una base de datos local durante el desarrollo. También permite que las migraciones de Entity Framework se ejecuten localmente. De forma predeterminada, Entity Framework no detectará cadenas de conexión almacenadas en la variable de entorno al ejecutar migraciones. - Cuando la aplicación se ejecuta en flujos de trabajo de Acciones de GitHub o en Producción, la cadena de conexión se extrae de variables de entorno. Las variables de entorno pueden evitar que las cadenas de conexión seguras de producción sean incluidas en el control de código fuente o en los archivos de configuración.
Creación de los servicios de Azure
La aplicación requerirá que se creen los siguientes servicios de Azure para una implementación correcta:
- Aplicación contenedora: Necesario para hospedar y ejecutar la aplicación implementada.
- Container Registry: Almacena la imagen compilada de la aplicación containerizada.
- SQL Database: Una base de datos de Azure SQL para almacenar los datos de la aplicación.
Las características de publicación de Visual Studio pueden controlar la creación de estos recursos.
Creación de la aplicación contenedora de Azure y Azure Container Registry
En el Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el nodo de proyecto de nivel superior y seleccione Publicar.
En el cuadro de diálogo de publicación, seleccione Azure como destino de implementación y, a continuación, seleccione Siguiente.
Para el destino específico, seleccione Azure Container Apps (Linux) y, a continuación, seleccione Siguiente.
Cree una nueva aplicación de contenedor en la que implementar. Seleccione el botón + Crear nuevo para abrir un cuadro de diálogo nuevo y escriba los valores siguientes:
- Nombre de la aplicación contenedora: Deje el valor predeterminado o escriba un nombre.
- Nombre de la suscripción: Seleccione la suscripción en la que se va a realizar la implementación.
- Grupo de recursos: Seleccione Nuevo y cree un nuevo grupo de recursos denominado msdocs-app-db-ef.
-
Entorno de aplicaciones de contenedor: Seleccione Nuevo para abrir el cuadro de diálogo entorno de aplicaciones de contenedor y escriba los valores siguientes:
- Nombre del entorno: Mantenga el valor predeterminado.
- Ubicación: Seleccione una ubicación cerca de usted.
-
Área de trabajo de Azure Log Analytics: Seleccione Nuevo para abrir el cuadro de diálogo área de trabajo de Log Analytics.
- Nombre: Deje el valor predeterminado.
- Ubicación: Seleccione una ubicación cerca de usted y, a continuación, seleccione Aceptar para cerrar el cuadro de diálogo.
- Seleccione Aceptar para cerrar el cuadro de diálogo entorno de aplicaciones de contenedor.
- Seleccione Crear para cerrar el cuadro de diálogo aplicaciones de contenedor originales. Visual Studio crea el recurso de aplicación de contenedor en Azure.
Una vez creado el recurso, asegúrese de que está seleccionado en la lista de aplicaciones de contenedor y, a continuación, seleccione Siguiente.
Tendrá que crear una instancia de Azure Container Registry para almacenar el artefacto de imagen publicado para la aplicación. Seleccione el icono verde + en la pantalla Container Registry .
Deje los valores predeterminados y seleccione Crear.
Una vez creado el registro de contenedor, asegúrese de que está seleccionado y, a continuación, seleccione siguiente.
En la pantalla Tipo de implementación , seleccione CI/CD con flujos de trabajo de Acciones de GitHub (genera un archivo yml) y, a continuación, elija Finalizar. Si Visual Studio le pide que habilite al usuario administrador para acceder al contenedor de Docker publicado, seleccione Sí.
Visual Studio crea y muestra el perfil de publicación. La mayoría de los pasos y detalles de publicación se describen en el archivo Acciones .yml
de GitHub, que se puede ver haciendo clic en el botón Editar flujo de trabajo de la vista de resumen del perfil de publicación. Este archivo se trata en mayor profundidad más adelante en el artículo.
Creación de Azure SQL Database
- En el Explorador de soluciones, haga clic con el botón derecho en el nodo Servicios conectados y seleccione Agregar > base de datos de SQL Server.
- En el cuadro de diálogo Conectarse a dependencias , seleccione Azure SQL Database y, a continuación, elija Siguiente.
- Seleccione + Crear nuevo para agregar una nueva base de datos.
- En el cuadro de diálogo de Azure SQL Database, escriba los siguientes valores:
- Nombre de la base de datos: Deje el valor predeterminado.
- Nombre de la suscripción: Seleccione la misma suscripción que antes.
-
Grupo de recursos: Seleccione el mismo
msdocs-app-db-ef
grupo creado anteriormente. -
Servidor de bases de datos: Seleccione Nuevo... y, a continuación, escriba los siguientes valores en el nuevo elemento emergente:
- Nombre del servidor de base de datos: Escriba un nombre de servidor único o anexe números aleatorios al final del nombre generado automáticamente.
- Ubicación: Seleccione una ubicación cercana a usted.
- Nombre de usuario del administrador: Escriba un valor de su elección.
- Contraseña de administrador: Escriba un valor de su elección.
- Contraseña de administrador (confirmar): Escriba la misma contraseña para confirmar. Seleccione Aceptar para cerrar el cuadro de diálogo de SQL Server.
- Seleccione Crear para crear la base de datos y SQL Server.
- Cuando se complete la operación, seleccione el servidor de la lista y elija Siguiente.
- En el cuadro de diálogo Conectar a Azure SQL Database, deje los valores predeterminados, pero asegúrese de que Ninguno esté seleccionado en la parte inferior para la opción Guardar valor de cadena de conexión en.
- Seleccione Finalizar y Visual Studio creará los recursos de SQL.
Conexión de la aplicación contenedora a Azure SQL
En la página de información general de la aplicación contenedora que creó, seleccione Service Connector (versión preliminar) en el panel de navegación izquierdo.
Seleccione + Crear para crear una nueva conexión.
En el control flotante Crear conexión, introduzca los valores siguientes:
Contenedor: Seleccione el contenedor dotnetcoresqldb que creó.
Tipo de servicio: Seleccione SQL Database.
Suscripción: Seleccione la misma suscripción que usó para crear la aplicación contenedora.
Nombre de conexión: Deje el valor predeterminado.
SQL Server: Seleccione el servidor de base de datos que creó anteriormente.
Base de datos SQL: Seleccione la base de datos que creó anteriormente.
Tipo de cliente: Seleccione .NET.
Seleccione Siguiente: Autenticación y escriba los valores siguientes:
- Seleccione Cadena de conexión para el tipo de autenticación.
- Nombre de usuario: Escriba el nombre de usuario que usó al crear el servidor de bases de datos.
- Contraseña: Escriba la contraseña que usó al crear el servidor de bases de datos.
Deje el resto de la configuración de forma predeterminada y seleccione Siguiente: Redes.
Deje el valor predeterminado seleccionado y elija Siguiente: Revisar y crear.
Después de validar Azure, la configuración, seleccione Crear.
Después de un momento, debería aparecer la conexión a la base de datos SQL. Seleccione la flecha para expandir la conexión y ver el valor de AZURE_SQL_CONNECTIONSTRING . Este nombre de conexión coincide con el nombre de la cadena de conexión de la variable de entorno definida en la aplicación de ejemplo.
Configuración del flujo de trabajo de Acciones de GitHub
GitHub puede usar el archivo de flujo de trabajo de Acciones de GitHub generado por Visual Studio para compilar e implementar la aplicación en Azure cuando se insertan cambios. Actualmente, este proceso funcionaría, pero la aplicación implementada produciría una excepción. Aunque se creó la base de datos de Azure SQL, se debe agregar un paso al flujo de trabajo acciones de GitHub para generar el esquema. La cadena de conexión para la base de datos de Azure SQL se puede almacenar de forma segura como un secreto en GitHub y ser recuperada por el flujo de trabajo cuando se ejecuta.
Recuperar la cadena de conexión y agregarla a secretos de GitHub
En Azure Portal, busque la base de datos que creó en la barra de búsqueda principal y selecciónela en los resultados.
En la página de información general de la base de datos, seleccione Cadenas de conexión en el panel de navegación izquierdo.
En la pestaña ADO.NET , copie la cadena de conexión fuera del campo de formulario.
Vaya al repositorio bifurcado de GitHub de la aplicación.
En la pestaña Configuración, seleccione Acciones de secretos > en el panel de navegación izquierdo y, a continuación, elija Nuevo secreto de repositorio.
En la página Nuevo secreto , escriba los valores siguientes:
La cadena de conexión ahora se almacena de forma segura en los secretos del repositorio de GitHub y se puede recuperar mediante un flujo de trabajo de GitHub.
Modificación del flujo de trabajo de Acciones de GitHub para habilitar las migraciones
Abra el archivo de flujo de trabajo
.yml
acciones de GitHub generado por Visual Studio seleccionando el botón Editar flujo de trabajo en la página de resumen de publicación.Anexe el archivo yaml siguiente al final del archivo de flujo de trabajo:
- name: Run EF run: | dotnet tool install --global dotnet-ef dotnet tool restore dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
Este código instala las herramientas de línea de comandos de Entity Framework y ejecuta las migraciones de aplicaciones. Cuando se ejecuta el flujo de trabajo, el código también usa el parámetro
connection
del comandodatabase update
para invalidar la cadena de conexión delocaldb
almacenada en el archivoappsettings.json
con el valor que se agregó a los secretos de GitHub.
Ejecución del flujo de trabajo de Acciones de GitHub y prueba de la implementación
Confirma los cambios en la aplicación y empuja al repositorio bifurcado usando el siguiente comando:
git add --all git commit -m "Added GitHub Actions workflow" git push
Vaya al repositorio de GitHub y seleccione la pestaña Acciones . Una ejecución de flujo de trabajo debería haberse desencadenado automáticamente si la inserción se realizó correctamente.
Seleccione el flujo de trabajo activo para ver los detalles del registro de cada paso a medida que se completan. La migración se ejecuta por última vez para actualizar la base de datos en Azure.
Una vez completado el flujo de trabajo, la aplicación se implementa en Azure Container Apps y se conecta a la base de datos con un esquema actualizado.
Puede probar la implementación; para ello, vaya a la página principal de la aplicación contenedora y cree una tarea TODO, como hizo localmente. Siempre puede encontrar la dirección URL de la aplicación contenedora en la página de información general de la aplicación en Azure Portal.