Compartir a través de


Notificaciones por correo electrónico para el ajuste automático

Se aplica a:Azure SQL DatabaseAzure SQL Managed Instance

Las recomendaciones de ajustes de Azure SQL Database se generan mediante el ajuste automático de Azure SQL Database. Esta solución supervisa y analiza de forma continua las cargas de trabajo de las bases de datos y proporciona recomendaciones de ajustes personalizadas para cada base de datos individual relacionadas con la creación y eliminación de índices y la optimización de los planes de ejecución de consultas.

Las recomendaciones de ajuste automático de Azure SQL Database pueden verse en Azure Portal y recuperarse con llamadas a la API REST, o mediante los comandos T-SQL y PowerShell. Este artículo se basa en el uso de un script de PowerShell para recuperar las recomendaciones de ajuste automático.

Nota

En este artículo se usa el módulo Az de PowerShell, que es el módulo de PowerShell que se recomienda para interactuar con Azure. Para empezar a trabajar con el módulo Az de PowerShell, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Importante

El módulo de Azure Resource Manager (AzureRM) de PowerShell ha quedado en desuso el 29 de febrero de 2024. Todo el desarrollo futuro debe usar el módulo Az.Sql. Se recomienda a los usuarios migrar de AzureRM al módulo Az PowerShell para seguir recibiendo soporte técnico y actualizaciones. El módulo AzureRM ya no cuenta con mantenimiento ni soporte. Los argumentos de los comandos del módulo Az PowerShell y en los módulos AzureRM son sustancialmente idénticos. Para obtener más información sobre su compatibilidad, consulte Introducción al nuevo módulo de Az PowerShell.

Automatización de las notificaciones por correo electrónico para las recomendaciones del ajuste automático

La siguiente solución automatiza el envío de notificaciones por correo electrónico que contienen recomendaciones sobre el ajuste automático. La solución descrita consiste en automatizar la ejecución de un script de PowerShell para recuperar las recomendaciones de ajustes mediante Azure Automation, y automatizar el trabajo de programación de la entrega de correos electrónicos mediante Microsoft Power Automate.

Creación de una cuenta de Azure Automation

Para utilizar Azure Automation, primero debe crear una cuenta de automatización y configurarla con los recursos de Azure que se usarán para ejecutar el script de PowerShell. Para más información sobre Azure Automation y sus funcionalidades, consulte Introducción a Azure Automation.

Siga estos pasos para crear la cuenta de Azure Automation mediante el método de selección y configuración de la aplicación Automation de Azure Marketplace:

  1. Inicie sesión en Azure Portal.

  2. Seleccione + Crear un recurso en el menú de recursos.

  3. Busque Automation.

  4. Seleccione la aplicación Automation en los resultados de búsqueda.

    Captura de pantalla del portal de Azure buscando Automation.

  5. Una vez dentro del panel "Crear una cuenta de Automation", seleccione Crear.

  6. Seleccione una suscripción y un grupo de recursos que se usará para la ejecución del script de PowerShell. Escriba un nombre para esta cuenta de automatización.

  7. Seleccione Advanced (Avanzadas). Compruebe que el sistema asignado está activado, de modo que se cree una identidad administrada asignada por el sistema (SAMI) para autenticarse en los recursos de Azure.

  8. Seleccione Etiquetas. Considere la posibilidad de usar las etiquetas de Azure. Por ejemplo, la etiqueta "Propietario" o "CreatedBy" se usa para identificar quién creó el recurso y la etiqueta "Entorno" para identificar si este recurso está en Producción, Desarrollo, etc. Para obtener más información, consulte Desarrollo de la estrategia de nomenclatura y etiquetado de los recursos de Azure.

  9. Seleccione Revisar y crear.

  10. Para finalizar la creación de la cuenta de Automation, seleccione Crear.

Asignación de roles de Azure a la cuenta de identidad administrada asignada por el sistema

Una cuenta de Automation puede usar su identidad administrada asignada por el sistema para obtener tokens para acceder a otros recursos protegidos por el identificador de Entra de Microsoft, como Azure SQL Database. Estos tokens no representan a ningún usuario específico de la aplicación, sino que representan la aplicación que accede al recurso. En este caso, por ejemplo, el token representa una cuenta de Automation.

Antes de crear un runbook de Azure Automation, es importante conceder el nivel de permisos adecuado a la cuenta de automatización, siguiendo el principio de los privilegios mínimos. Cuando se usa una identidad administrada asignada por el sistema, agregar los roles Colaborador de SQL DB y Colaborador de SQL Server al SAMI es suficiente para automatizar las tareas de Azure SQL Database. En la mayoría de los escenarios, si la automatización solo tiene como destino bases de datos específicas, use el ámbito de nivel de grupo de recursos. Si debe funcionar en toda una suscripción, use el ámbito de nivel de suscripción.

En el ejemplo siguiente se usa Azure PowerShell para asignar el rol Colaborador de SQL DB en la suscripción actual a la cuenta de identidad administrada asignada por el sistema.

$roleAssignmentParams = @{
     ObjectId = "<automation-Identity-object-id>"
     Scope = "/subscriptions/<subscription-id>"
     RoleDefinitionName = "SQL DB Contributor"
}

New-AzRoleAssignment @roleAssignmentParams

Para agregar estos roles a una identidad administrada asignada por el sistema desde Azure Portal, siga estos pasos:

  1. Inicie sesión en Azure Portal.
  2. Busque la cuenta de Azure Automation recién creada.
  3. En Configuración de la cuenta, seleccione Identidad.
  4. En Permisos, seleccione el cuadro Asignaciones de roles de Azure .
  5. Seleccione Agregar asignación de roles (versión preliminar) .
  6. En la lista desplegable Ámbito, seleccione el conjunto de recursos que aplica la asignación de roles: Suscripción, Grupo de recursos, Rol y Ámbito.
  7. En la lista desplegable Rol, seleccione un rol como Colaborador de base de datos SQL.
  8. Haga clic en Guardar.

Repita los pasos del paso Agregar asignación de roles para agregar el rol Colaborador de SQL Server .

Sugerencia

Registre el nombre de la cuenta de Azure Automation, el identificador de suscripción y los recursos (por ejemplo, copiar y pegar en el Bloc de notas) tal y como se especificó al crear la aplicación Automation. Necesitará esta información más adelante.

Si tiene varias suscripciones a Azure para las que quiere compilar la misma automatización, deberá repetir este proceso para las otras suscripciones.

Actualización de los módulos de Azure Automation

El script de PowerShell para recuperar la recomendación de ajuste automático usa los comandos Get-AzResource y Get-AzSqlDatabaseRecommendedAction para los que se requiere la actualización de los módulos de Azure a la versión 4 o posterior.

Creación de un runbook de Azure Automation

El siguiente paso consiste en crear un runbook en Azure Automation en el que se encuentre el script de PowerShell para la recuperación de recomendaciones de ajuste.

Para crear un nuevo runbook de Azure Automation, siga estos pasos:

  1. Acceda a la cuenta de Azure Automation que creó en el paso anterior.
  2. Una vez en el panel de la cuenta de Automatización, seleccione el elemento de menú Procedimientos en el lado izquierdo para crear un nuevo procedimiento de Automatización de Azure con el script de PowerShell. Para obtener más información sobre la creación de runbooks de automatización, consulte Creación de un runbook.
  3. Para agregar un nuevo libro de operaciones, seleccione la opción de menú +Agregar un libro de operaciones y, a continuación, elija Creación rápida: Crear un nuevo libro de operaciones.
  4. En el panel Runbook, escriba el nombre del runbook (en este ejemplo, Se usa AutomaticTuningEmailAutomation ), seleccione el tipo de runbook como PowerShell y escriba una descripción de este runbook para describir su propósito.
  5. Seleccione Crear para finalizar la creación de un nuevo runbook.

Siga estos pasos para cargar un script de PowerShell en el runbook creado:

  1. En el panel Editar runbook de PowerShell, seleccione RUNBOOKS en el árbol de menú y expanda la vista hasta que vea el nombre del runbook (en este ejemplo, AutomaticTuningEmailAutomation). Seleccione este runbook.
  2. En la primera línea del panel "Editar runbook de PowerShell" (comenzando por el número 1), copie y pegue el siguiente código de script de PowerShell. Este script de PowerShell se proporciona tal cual para ayudarle a comenzar. Modifíquelo para que se adapte a sus necesidades.

En el encabezado del script de PowerShell proporcionado, es necesario reemplazar <SUBSCRIPTION_ID_WITH_DATABASES> por su identificador de suscripción de Azure. Para obtener información sobre cómo recuperar el identificador de la suscripción de Azure, consulte Getting your Azure Subscription GUID (Obtención del GUID de la suscripción a Azure).

Si tiene varias suscripciones, puede agregarlas como una lista delimitada por comas a la propiedad "$subscriptions" del encabezado del script.

# PowerShell script to retrieve Azure SQL Database automatic tuning recommendations.
#
# Provided "as-is" with no implied warranties or support.
# The script is released to the public ___domain.
#
# Replace <SUBSCRIPTION_ID_WITH_DATABASES> in the header with your Azure subscription ID.
#
# Microsoft Azure SQL Database team, 2018-01-22.

# Set subscriptions : IMPORTANT – REPLACE <SUBSCRIPTION_ID_WITH_DATABASES> WITH YOUR SUBSCRIPTION ID
$subscriptions = ("<SUBSCRIPTION_ID_WITH_DATABASES>", "<SECOND_SUBSCRIPTION_ID_WITH_DATABASES>", "<THIRD_SUBSCRIPTION_ID_WITH_DATABASES>")

# Get credentials
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

# Define the resource types
$resourceTypes = ("Microsoft.Sql/servers/databases")
$advisors = ("CreateIndex", "DropIndex");
$results = @()

# Loop through all subscriptions
foreach ($subscriptionId in $subscriptions) {
    Select-AzSubscription -SubscriptionId $subscriptionId
    $rgs = Get-AzResourceGroup

    # Loop through all resource groups
    foreach ($rg in $rgs) {
        $rgname = $rg.ResourceGroupName;

        # Loop through all resource types
        foreach ($resourceType in $resourceTypes) {
            $resources = Get-AzResource -ResourceGroupName $rgname -ResourceType $resourceType

            # Loop through all databases
            # Extract resource groups, servers and databases
            foreach ($resource in $resources) {
                $resourceId = $resource.ResourceId
                if ($resourceId -match ".*RESOURCEGROUPS/(?<content>.*)/PROVIDERS.*") {
                    $ResourceGroupName = $matches['content']
                }
                else {
                    continue
                }
                if ($resourceId -match ".*SERVERS/(?<content>.*)/DATABASES.*") {
                    $ServerName = $matches['content']
                }
                else {
                    continue
                }
                if ($resourceId -match ".*/DATABASES/(?<content>.*)") {
                    $DatabaseName = $matches['content']
                }
                else {
                    continue
                }

                # Skip if master
                if ($DatabaseName -eq "master") {
                    continue
                }

                # Loop through all automatic tuning recommendation types
                foreach ($advisor in $advisors) {
                    $recs = Get-AzSqlDatabaseRecommendedAction -ResourceGroupName $ResourceGroupName -ServerName $ServerName  -DatabaseName $DatabaseName -AdvisorName $advisor
                    foreach ($r in $recs) {
                        if ($r.State.CurrentValue -eq "Active") {
                            $object = New-Object -TypeName PSObject
                            $object | Add-Member -Name 'SubscriptionId' -MemberType Noteproperty -Value $subscriptionId
                            $object | Add-Member -Name 'ResourceGroupName' -MemberType Noteproperty -Value $r.ResourceGroupName
                            $object | Add-Member -Name 'ServerName' -MemberType Noteproperty -Value $r.ServerName
                            $object | Add-Member -Name 'DatabaseName' -MemberType Noteproperty -Value $r.DatabaseName
                            $object | Add-Member -Name 'Script' -MemberType Noteproperty -Value $r.ImplementationDetails.Script
                            $results += $object
                        }
                    }
                }
            }
        }
    }
}

# Format and output results for the email
$table = $results | Format-List
Write-Output $table

Seleccione Guardar para guardar el script. Cuando esté satisfecho con el script, proceda a seleccionar Publicar para publicar esta guía de ejecución.

En el panel principal del runbook, puede seleccionar Iniciar para probar el script. Seleccione Salida para ver los resultados del script ejecutado. Esta salida será el contenido de su correo electrónico.

Asegúrese de ajustar el contenido. Para ello, personalice el script de PowerShell según sus necesidades.

Con los pasos anteriores, el script de PowerShell para recuperar las recomendaciones de ajuste automático se carga en Azure Automation. El siguiente paso consiste en automatizar y programar el trabajo de entrega de correos electrónicos.

Automatización de los trabajos de correo electrónico con Microsoft Power Automate

Para completar la solución, como último paso, cree en Microsoft Power Automate un flujo de automatización que conste de tres acciones (trabajos):

  • Azure Automation - Crear trabajo: se usa para ejecutar el script de PowerShell a fin de recuperar las recomendaciones de ajuste automático del runbook de Azure Automation.
  • Azure Automation - Obtener resultado del trabajo: se usa para recuperar la salida del script de PowerShell ejecutado.
  • Office 365 Outlook : enviar un correo electrónico , que se usa para enviar correo electrónico. Los correos electrónicos se envían mediante la cuenta profesional o educativa de la persona que crea el flujo.

Para obtener más información sobre las funcionalidades de Microsoft Power Automate, consulte Introducción a Microsoft Power Automate.

El requisito previo para este paso es registrarse en una cuenta de Microsoft Power Automate e iniciar sesión. Una vez dentro de la solución, siga estos pasos para configurar un flujo nuevo:

  1. Obtener acceso al elemento de menú Mis flujos .
  2. Dentro de Mis flujos, seleccione el vínculo +Crear desde cero en la parte superior de la página.
  3. Seleccione el vínculo Buscar cientos de conectores y desencadenadores.
  4. En el campo de búsqueda, escriba periodicidad y seleccione Programación: periodicidad en los resultados de búsqueda para programar la ejecución del trabajo de entrega de correo electrónico.
  5. Desde el panel Periodicidad, en el campo Frecuencia, seleccione la frecuencia de programación para la ejecución de este flujo; por ejemplo, enviar un correo electrónico automatizado cada minuto, hora, día, semana, etc.

El siguiente paso consiste en agregar tres trabajos (crear, obtener salida y enviar correo electrónico) al flujo periódico recién creado. Para agregar los trabajos necesarios al flujo, siga estos pasos:

  1. Cree una acción para ejecutar el script de PowerShell para recuperar las recomendaciones de ajuste.

    1. Seleccione +Nuevo paso, seguido de Agregar una acción dentro del panel Flujo de periodicidad.
    2. En el campo de búsqueda, escriba automatización y seleccione Azure Automation – Crear trabajo a partir de los resultados de búsqueda.
    3. En el panel de trabajo Crear, configure las propiedades del trabajo. Para esta configuración, necesita detalles del identificador de suscripción de Azure, el grupo de recursos y la cuenta de Automation que se registraron anteriormente en el panel Cuenta de Automation. Para obtener más información acerca de las opciones disponibles en esta sección, consulte Azure Automation – Create job (Azure Automation - Crear un trabajo).
    4. Seleccione Guardar el flujo.
  2. Cree una acción para recuperar la salida del script de PowerShell ejecutado.

    1. Seleccione +Nuevo paso, seguido de Agregar una acción dentro del panel Flujo de periodicidad.
    2. En el campo de búsqueda, escriba automation y seleccione Azure Automation – Obtener resultado del trabajo en los resultados de la búsqueda. Para obtener más información acerca de las opciones disponibles en esta sección, consulte Azure Automation – Get job output" (Azure Automation - Obtener la salida de trabajo).
    3. Rellene los campos obligatorios (como cuando creó el trabajo anterior): rellene su id. de suscripción de Azure, el grupo de recursos y la cuenta de Automation (tal y como se especificó en el panel de la cuenta de Automation).
    4. Seleccione dentro del campo Id. de trabajo para que aparezca el menú Contenido dinámico . En este menú, seleccione la opción Id. de trabajo.
    5. Seleccione Guardar el flujo.
  3. Creación de una acción para enviar correos electrónicos mediante la integración de Office 365

    1. Seleccione +Nuevo paso, seguido de Agregar una acción dentro del panel Flujo de periodicidad.
    2. En el campo de búsqueda, escriba enviar un correo electrónico y seleccione Office 365 Outlook – Enviar un correo electrónico desde los resultados de la búsqueda.
    3. En el campo Para , escriba la dirección de correo electrónico a la que necesita enviar el correo electrónico de notificación.
    4. En el campo Asunto , escriba el asunto del correo electrónico, por ejemplo, "Notificación de correo electrónico de recomendaciones de ajuste automático".
    5. Seleccione dentro del campo Cuerpo para que aparezca el menú Contenido dinámico . En este menú, en Obtener salida del trabajo, seleccione Contenido.
    6. Seleccione Guardar el flujo.

Sugerencia

Para enviar correos electrónicos automatizados a varios destinatarios, cree flujos independientes. En estos flujos adicionales, cambie la dirección de correo electrónico del destinatario en el campo Para y la línea de asunto del correo electrónico en el campo Asunto . La creación de nuevos runbooks en Azure Automation con scripts de PowerShell personalizados (por ejemplo, con el cambio de identificador de suscripción de Azure) permite personalizar aún más escenarios automatizados, como, por ejemplo, enviar por correo electrónico destinatarios independientes en recomendaciones de optimización automatizada para suscripciones independientes.

Los pasos anteriores configuran el flujo de trabajo de entrega de correo electrónico. El flujo completo, que consta de tres acciones integradas, se muestra en la imagen siguiente.

Para probar el flujo, seleccione Ejecutar ahora. Las estadísticas de la ejecución de los trabajos automatizados, que muestran si las notificaciones por correo electrónico se enviaron correctamente, se pueden ver desde el panel de análisis de Flow.

El panel Análisis de flujo es útil para supervisar el éxito de las ejecuciones de trabajos y, si es necesario, para solucionar problemas. Para solucionar problemas, también puede examinar el registro de ejecución del script de PowerShell accesible a través de la aplicación Azure Automation.

El resultado final del correo electrónico automatizado tiene un aspecto similar al siguiente correo electrónico recibido después de compilar y ejecutar esta solución:

Captura de pantalla de Microsoft Outlook de una salida de correo electrónico de ejemplo de notificaciones de correo electrónico de ajuste automático.

Mediante el ajuste del script de PowerShell, puede ajustar la salida y el formato del correo electrónico automatizado según sus necesidades.

También puede personalizar aún más la solución para compilar notificaciones por correo electrónico en función de un evento de ajuste específico, y para varios destinatarios, suscripciones o bases de datos, según sus escenarios personalizados.