Compartir a través de


Uso de Azure Functions para conectarse a una base de datos de Azure SQL Database

En este artículo se indica cómo usar Azure Functions para crear un trabajo programado que se conecte a una instancia de Azure SQL Database o una instancia administrada de Azure SQL. El código de función limpia las filas de una tabla de la base de datos. La nueva función de C# se crea a partir de una plantilla de desencadenador del temporizador predefinida de Visual Studio 2019. Para que este escenario sea posible, también debe establecer una cadena de conexión de base de datos como una configuración de aplicación en la aplicación de función. En el caso de la instancia administrada de Azure SQL, debe habilitar el punto de conexión público para poder conectarse desde Azure Functions. En este escenario se utiliza una operación masiva en la base de datos.

Si es la primera vez que trabaja con funciones de C#, debe leer la referencia para desarrolladores de C# de Azure Functions.

Prerrequisitos

  • Complete los pasos del artículo Creación de la primera función mediante Visual Studio para crear una aplicación de funciones local que tenga como destino la versión 2.x o una posterior del entorno en tiempo de ejecución. También debe haber publicado el proyecto en una aplicación de función en Azure.

  • En este artículo se realiza una demostración de un comando de Transact-SQL que ejecuta una operación de limpieza masiva en la tabla SalesOrderHeader de la base de datos AdventureWorksLT de ejemplo. Para crear la base de datos de ejemplo AdventureWorksLT, efectúe los pasos indicados en el artículo Creación de una base de datos de Azure SQL Database mediante Azure Portal.

  • Debe agregar una regla de firewall de nivel de servidor para la dirección IP pública del equipo que usa para seguir este inicio rápido. Esta regla debe ser capaz de acceder a la instancia de SQL Database desde el equipo local.

Obtención de información sobre la conexión

Deberá obtener la cadena de conexión de la base de datos que creó una vez concluidos los pasos de Creación de una base de datos en Azure SQL Database mediante Azure Portal.

  1. Inicie sesión en Azure Portal.

  2. Seleccione SQL Database en el menú de la izquierda y seleccione la base de datos en la página SQL Database.

  3. Seleccione Cadenas de conexión en Configuración y copie la cadena de conexión de ADO.NET completa. Para la instancia administrada de Azure SQL, copie la cadena de conexión para el punto de conexión público.

    Copie la cadena de conexión de ADO.NET.

Establecimiento de la cadena de conexión

Una aplicación de función hospeda la ejecución de sus funciones en Azure. Como práctica de seguridad recomendada, almacene las cadenas de conexión y otros secretos en la configuración de la aplicación de función. El uso de la configuración de la aplicación impide divulgaciones accidentales de la cadena de conexión con el código. Puede acceder a la configuración de la aplicación para la aplicación de función directamente desde Visual Studio.

Anteriormente debe haber publicado la aplicación en Azure. Si todavía no lo ha hecho, publique la aplicación de función en Azure.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto de aplicación de funciones y elija Publicar.

  2. En la página Publicar, seleccione los puntos suspensivos (...) en el área Hospedaje y elija Administrar la configuración de Azure App Service.

    Administrar la configuración de Azure App Service de la aplicación de funciones.

  3. En Configuración de la aplicación, seleccione Agregar configuración y, en Nuevo nombre de configuración de aplicación, escriba sqldb_connection y seleccione Aceptar.

    Agregar una configuración de aplicación para la aplicación de funciones.

  4. En la nueva configuración sqldb_connection, pegue la cadena de conexión que copió en la sección anterior en el campo Local y reemplace los marcadores de posición {your_username} y {your_password} por valores reales. Seleccione Insertar un valor desde Local para copiar el valor actualizado en el campo Remoto y seleccione Aceptar.

    Incorporación de una configuración de cadena de conexión SQL.

    Las cadenas de conexión se almacenan cifradas en Azure (Remoto). Para evitar la pérdida de secretos, el archivo de proyecto local.settings.json (Local) se debe excluir de control de código fuente, por ejemplo, utilizando un archivo .gitignore.

Incorporación del paquete SqlClient al proyecto

Necesita agregar el paquete NuGet que contiene la biblioteca de SqlClient. Esta biblioteca de acceso de datos es necesaria para conectarse a SQL Database.

  1. Abra el proyecto de aplicación de funciones local en Visual Studio 2022.

  2. En el Explorador de soluciones, haga clic con el botón derecho en proyecto de la aplicación de función y elija Administrar paquetes NuGet.

  3. En la pestaña Examinar, busque Microsoft.Data.SqlClient y selecciónelo.

  4. En la página Microsoft.Data.SqlClient, seleccione la versión 5.1.0 y haga clic en Instalar.

  5. Cuando finalice la instalación, revise los cambios y, a continuación, haga clic en Aceptar para cerrar la ventana Vista previa.

  6. Si aparece una ventana de Aceptación de licencia, haga clic en Acepto.

Ahora, puede agregar el código de función de C# que conecta con SQL Database.

Adición de una función desencadenada por el temporizador

  1. En el Explorador de soluciones, haga clic con el botón derecho en proyecto de la aplicación de función y elija Agregar>Nueva función de Azure.

  2. Con la plantilla Azure Functions seleccionada, asigne un nombre al nuevo elemento parecido a DatabaseCleanup.cs y seleccione Agregar.

  3. En el diálogo cuadro Nueva función de Azure, elija Desencadenador de temporizador y luego Agregar. Este cuadro de diálogo crea un archivo de código para la función desencadenada por el temporizador.

  4. Abra el nuevo archivo de código y agregue las siguientes instrucciones using en la parte superior de dicho archivo:

    using Microsoft.Data.SqlClient;
    using System.Threading.Tasks;
    
  5. Reemplace la función Run existente por el código siguiente:

    [FunctionName("DatabaseCleanup")]
    public static async Task Run([TimerTrigger("*/15 * * * * *")]TimerInfo myTimer, ILogger log)
    {
        // Get the connection string from app settings and use it to create a connection.
        var str = Environment.GetEnvironmentVariable("sqldb_connection");
        using (SqlConnection conn = new SqlConnection(str))
        {
            conn.Open();
            var text = "UPDATE SalesLT.SalesOrderHeader " +
                    "SET [Status] = 5  WHERE ShipDate < GetDate();";
    
            using (SqlCommand cmd = new SqlCommand(text, conn))
            {
                // Execute the command and log the # rows affected.
                var rows = await cmd.ExecuteNonQueryAsync();
                log.LogInformation($"{rows} rows were updated");
            }
        }
    }
    

    Esta función se ejecuta cada 15 segundos para actualizar la columna Status según la fecha de envío. Para más información sobre el desencadenador de temporizador, consulte Desencadenador de temporizador para Azure Functions.

  6. Presione F5 para iniciar la aplicación de función. Se abrirá la ventana de ejecución de Azure Functions Core Tools detrás de Visual Studio.

  7. A los 15 segundos del inicio, se ejecuta la función. Observe la salida y tenga en cuenta el número de filas actualizadas en la tabla SalesOrderHeader.

    Vista de los registros de función.

    En la primera ejecución, debería actualizar 32 filas de datos. Las ejecuciones siguientes no actualizan ninguna fila de datos, a menos que realice cambios en los datos de la tabla SalesOrderHeader para que la instrucción UPDATE seleccione más filas.

Si tiene previsto publicar esta función, no olvide cambiar el atributo TimerTrigger a una programación cron más razonable que cada quince segundos. También debe asegurarse de que su aplicación de funciones puede acceder a la base de datos de Azure SQL o Azure SQL Managed Instance. Para más información, consulte uno de los siguientes vínculos en función de su tipo de Azure SQL:

Pasos siguientes

A continuación, obtenga información sobre cómo usar Functions con Logic Apps para la integración con otros servicios.

Para más información sobre Functions, vea los siguientes artículos: