Uso de Azure Functions para administrar recursos de computación para el pool de SQL dedicado (anteriormente SQL DW) en Azure Synapse Analytics

En este tutorial se usa Azure Functions para administrar recursos de proceso para un grupo de SQL dedicado (anteriormente SQL DW) en Azure Synapse Analytics.

Para usar una aplicación de funciones de Azure con un grupo de SQL dedicado (anteriormente SQL DW), debe crear una Cuenta de Principal de Servicio. La cuenta de entidad de servicio necesita obtener acceso de colaborador en la misma suscripción que la instancia de grupo de SQL dedicado (anteriormente SQL DW).

Implementación del escalado basado en temporizador con una plantilla de Azure Resource Manager

Para implementar la plantilla, necesita la siguiente información:

  • Nombre del grupo de recursos en el que se encuentra su instancia del grupo de SQL dedicado (anteriormente SQL DW).
  • Nombre del servidor en el que se encuentra la instancia del grupo de SQL dedicado (anteriormente SQL DW)
  • Nombre de la instancia del grupo de SQL dedicado (anteriormente SQL DW)
  • Identificación de inquilino (Identificación de directorio) del ID de Microsoft Entra
  • Id. de suscripción
  • Id. de aplicación de la entidad de servicio
  • Clave secreta del principal de servicio

Una vez que tenga la información anterior, implemente esta plantilla:

Imagen que muestra un botón con la etiqueta

Una vez que haya implementado la plantilla, debe encontrar tres recursos nuevos: un plan gratuito de Azure App Service, un plan de Function App basado en el consumo y una cuenta de almacenamiento que controle el registro y la cola de operaciones. Siga leyendo las otras secciones para ver cómo modificar las funciones implementadas para adaptarlas a sus necesidades.

Cambio de la hora de la operación de escalado

  1. Vaya a Function App Service. Si ha implementado la plantilla con los valores predeterminados, este servicio debe denominarse DWOperations. Una vez abierta la aplicación de funciones, debe observar que hay cinco funciones implementadas en Function App Service.

    Funciones que se implementan con plantilla

  2. Seleccione DWScaleDownTrigger o DWScaleUpTrigger para escalar hacia abajo o hacia arriba. En el menú desplegable, seleccione Integrar.

    Seleccione Integrar para la función.

  3. Actualmente, el valor mostrado debe indicar %ScaleDownTime% o %ScaleUpTime%. Estos valores indican que la programación se basa en los valores definidos en la configuración de la aplicación. Por ahora, puede omitir este valor y cambiar la programación a su hora preferida en función de los pasos siguientes.

  4. En el área de programación, agregue la expresión CRON que prefiera para reflejar la frecuencia con la que quiere que Azure Synapse Analytics se escale verticalmente.

    Cambiar programación de funciones

    El valor de schedule es una expresión CRON que incluye estos seis campos:

    {second} {minute} {hour} {day} {month} {day-of-week}
    

    Por ejemplo, "0 30 9 * * 1-5" reflejaría un desencadenador cada día de la semana a las 9:30 a. m. Para obtener más información, visite los ejemplos de programación de horarios de Azure Functions.

Cambio del nivel de computación

  1. Vaya a Function App Service. Si ha implementado la plantilla con los valores predeterminados, este servicio debe denominarse DWOperations. Una vez abierta la aplicación de funciones, debe observar que hay cinco funciones implementadas en Function App Service.

  2. Seleccione DWScaleDownTrigger o DWScaleUpTrigger para escalar hacia abajo o hacia arriba el valor de cálculo. Al seleccionar las funciones, el panel debe mostrar el archivo index.js .

    Cambiar el nivel de cálculo del desencadenador de función

  3. Cambie el valor de ServiceLevelObjective al nivel que desea y seleccione Guardar. ServiceLevelObjective es el nivel de proceso al que se escalará la instancia de almacenamiento de datos en función de la programación definida en la sección Integrar.

Use la pausa o la reanudación en lugar de la escala

Actualmente, las funciones activadas de forma predeterminada son DWScaleDownTrigger y DWScaleUpTrigger. Si quiere usar la funcionalidad de pausa y reanudación en su lugar, puede habilitar DWPauseTrigger o DWResumeTrigger.

  1. Vaya al panel Funciones.

    Panel Funciones

  2. Seleccione el interruptor deslizante para los desencadenadores que desee habilitar.

  3. Navegue hasta las pestañas Integrar pestañas para cambiar la programación de los respectivos desencadenadores.

    Nota:

    La diferencia funcional entre los desencadenadores de escalado y los desencadenadores de pausar y reanudar es el mensaje que se envía a la cola. Para obtener más información, consulte Adición de una nueva función de desencadenador.

Adición de una nueva función de desencadenador

Actualmente, solo hay dos funciones de escalado incluidas en la plantilla. Con estas funciones, en el transcurso de un día, solo puede reducir verticalmente y escalar horizontalmente una sola vez. Para un control más granular, como escalar horizontalmente varias veces al día o tener un comportamiento de escalado diferente durante los fines de semana, tendrá que agregar otro desencadenador.

  1. Cree una nueva función en blanco. Seleccione el botón + situado cerca de la sección de Functions para mostrar el panel de plantillas de función.

    Captura de pantalla que muestra el menú

  2. En Lenguaje, seleccione JavaScript y, a continuación, seleccione TimerTrigger.

    Creación de una nueva función

  3. Asigne un nombre a la función y establezca la programación. La imagen muestra cómo se puede desencadenar la función cada sábado a medianoche (viernes por la noche).

    Reducir verticalmente el sábado

  4. Copie el contenido de index.js de una de las otras funciones de desencadenador.

    Copiar el índice js

  5. Establezca la variable de operación en el comportamiento deseado de la manera siguiente:

    // Resume the dedicated SQL pool (formerly SQL DW) instance
    var operation = {
        "operationType": "ResumeDw"
    }
    
    // Pause the dedicated SQL pool (formerly SQL DW) instance
    var operation = {
        "operationType": "PauseDw"
    }
    
    // Scale the dedicated SQL pool (formerly SQL DW)l instance to DW600c
    var operation = {
        "operationType": "ScaleDw",
        "ServiceLevelObjective": "DW600c"
    }
    

Programación compleja

En esta sección se muestra brevemente lo que es necesario para obtener una programación más compleja de las funcionalidades de pausa, reanudación y escalado.

Ejemplo 1

Escalar horizontalmente todos los días a las 8 a. m. en DW600c y reducir verticalmente a las 8 p. m. en DW200c.

Function Programación Operación
Función1 0 0 8 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600c"}
Función2 0 0 20 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW200c"}

Ejemplo 2

Escalar horizontalmente todos los días a las 8 a. m. en DW1000c, reducir verticalmente una vez en DW600 a las 4 p. m. y reducir verticalmente a las 10 p. m. en DW200c.

Function Programación Operación
Function1 0 0 8 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW1000c"}
Función2 0 0 16 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600c"}
Function3 0 0 22 * * * var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW200c"}

Ejemplo 3

Escalar horizontalmente a las 8 a. m. en DW1000c y reducir verticalmente una vez en DW600c a las 4 p. m. los días laborables. Pausa el viernes 11 p. m., reanuda las 7 a.m. de lunes por la mañana.

Function Programación Operación
Función1 0 0 8 * * 1-5 var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW1000c"}
Function2 0 0 16 * * 1-5 var operation = {"operationType": "ScaleDw", "ServiceLevelObjective": "DW600c"}
Function3 0 0 23 * * 5 var operation = {"operationType": "PauseDw"}
Función4 0 0 7 * * 1 var operation = {"operationType": "ResumeDw"}

Pasos siguientes

Más información sobre la instancia de Azure Functions desencadenada mediante temporizador.

Consulte el repositorio de ejemplos del grupo de SQL dedicado (anteriormente SQL DW).