Soluciones de Azure que utilizan AzureLogic Apps, Event Grid y Functions

Este capítulo es la continuación del capítulo anterior y en él se profundizará en los servicios sin servidor disponibles en Azure. En el capítulo anterior, has conocido en detalle Azure Functions, las funciones como servicio, Durable Functions y Event Grid. En adelante, este capítulo se centrará en comprender Logic Apps y después en crear una solución integral sin servidor que combine varios servicios sin servidor y de otro tipo, como Key Vault y Azure Automation.

En este capítulo, exploraremos en mayor profundidad los servicios de Azure abordando los
siguientes temas:

  • Azure Logic Apps
  • Crear una solución integral con tecnologías sin servidor

Azure Logic Apps
Logic Apps es una oferta del flujo de trabajo sin servidor de Azure. Tiene todas las
características de las tecnologías sin servidor, como la gestión de costes basada en el
consumo y la escalabilidad ilimitada. Logic Apps nos ayuda a crear un proceso de negocio
y una solución de flujo de trabajo con facilidad mediante Azure Portal. Proporciona una IU
de arrastrar y soltar para crear y configurar flujos de trabajo.
El uso de Logic Apps es la forma preferida de integrar servicios y datos, crear proyectos
empresariales y crear un flujo completo de lógica. Hay varios conceptos importantes que
deben entenderse antes de crear una aplicación lógica.
Actividades
Una actividad es una sola unidad de trabajo. Entre los ejemplos de actividades se incluyen
la conversión de XML a JSON, la lectura de blobs desde Azure Storage y la escritura en una
colección de documentos de Cosmos DB. Logic Apps proporciona una definición de flujo de
trabajo que consta de varias actividades correlacionadas en una secuencia. Existen dos tipos
de actividades en Logic Apps:

  • Desencadenador: un desencadenador hace referencia a la iniciación de una actividad.
    Todas las aplicaciones lógicas tienen un desencadenador que forma la primera actividad.
    Es el desencadenador que crea una instancia de la aplicación lógica e inicia la ejecución.
    Entre algunos ejemplos de desencadenadores encontramos la llegada de mensajes de
    Event Grid, un correo electrónico, una solicitud HTTP o una programación.
  • Acciones: cualquier actividad que no es un desencadenador es una actividad de paso;
    cada una de ellas es responsable de realizar una tarea. Los pasos están conectados
    entre sí en un flujo de trabajo. Cada paso tendrá una acción que debe completarse
    antes de pasar al siguiente paso.

Conectores
Los conectores son recursos de Azure que ayudan a conectar una aplicación lógica a
servicios externos. Estos servicios pueden estar en el cloud u on-premises. Por ejemplo,
hay un conector para conectar aplicaciones lógicas a Event Grid. Del mismo modo, hay
otro conector para conectar a Office 365 Exchange. Casi todos los tipos de conectores
están disponibles en Logic Apps y se pueden usar para realizar la conexión a los servicios.
Los conectores contienen información de conexión y también lógica para realizar la
conexión a servicios externos mediante esta información de conexión.

La lista completa de conectores está disponible en https://docs.microsoft.com/connectors.
Ahora que ya conoces los conectores, debes entender cómo pueden coordinarse paso
a paso para que el flujo de trabajo funcione como se esperaba. En la siguiente sección,
nos centraremos en el funcionamiento de una aplicación lógica.
Funcionamiento de una aplicación lógica
Vamos a crear un flujo de trabajo de Logic Apps que se inicia cuando una cuenta de
correo electrónico recibe un mensaje. Responde al remitente con un correo electrónico
predeterminado y realiza análisis de sentimiento sobre el contenido del correo. Para el
análisis de sentimiento, el recurso Text Analytics de Cognitive Services debe aprovisionarse
antes de crear la aplicación lógica:

  1. Desplázate hasta Azure Portal, inicia sesión en tu cuenta y crea un recurso de Text
    Analytics en un grupo de recursos. Text Analytics forma parte de Cognitive Services
    y tiene características como análisis de sentimiento, extracción de frases clave
    y detección de idioma. Puedes encontrar el servicio en Azure Portal, como se
    muestra en la Figura 11.1:
  1. Indica los valores Nombre, Ubicación, Suscripción, Grupo de recursos y Nivel
    de precios. Usaremos el nivel gratuito (nivel F0) de este servicio para esta
    demostración.
  2. Una vez aprovisionado el recurso, desplázate hasta la página Información general
    y copia la dirección URL del punto de conexión. Guárdala en una ubicación temporal.
    Este valor será necesario al configurar la aplicación lógica.
  1. Desplázate hasta la página Claves y copia el valor de Clave 1 y guárdalo en una
    ubicación temporal. Este valor será necesario al configurar la aplicación lógica.
  2. El siguiente paso es crear una aplicación lógica. Para crear una aplicación lógica,
    dirígete al grupo de recursos de Azure Portal en el que se debe crear la aplicación
    lógica. Busca Logic App y créala proporcionando los valores Nombre, Ubicación,
    Grupo de recursos y Suscripción.
  3. Una vez creada la aplicación lógica, desplázate hasta el recurso, haz clic en Diseñador
    de aplicaciones lógicas en el menú que se encuentra a la izquierda y, a continuación,
    selecciona la plantilla Cuando se recibe un nuevo correo electrónico en Outlook.com
    para crear un nuevo flujo de trabajo. La plantilla proporciona una ventaja al agregar
    desencadenadores y actividades de plantilla. Esto agregará un desencadenador de
    Office 365 Outlook automáticamente al flujo de trabajo.
  4. Haz clic en el botón Iniciar sesión en el desencadenador; se abrirá una nueva ventana
    de Internet Explorer. A continuación, inicia sesión en tu cuenta. Después de iniciar
    sesión correctamente, se creará un nuevo conector de correo de Office 365 con la
    información de conexión a la cuenta.
  5. Haz clic en el botón Continuar y configura el desencadenador con una frecuencia
    de sondeo de 3 minutos, como se muestra en la Figura
  1. Haz clic en Siguiente paso para agregar otra acción y escribe la palabra clave
    variable en la barra de búsqueda. A continuación, selecciona la acción de variable
    de inicialización, como se muestra en la Figura
  1. Luego, configura la acción de variable. Al hacer clic en el cuadro de Valor, aparece
    una ventana emergente que muestra Contenido dinámico y Expresión. Contenido
    dinámico hace referencia a las propiedades disponibles para la acción actual y se
    rellenan con valores de tiempo de ejecución de desencadenadores y acciones
    anteriores. Las variables ayudan a mantener los flujos de trabajo genéricos. En esta
    ventana, selecciona Cuerpo en Contenido dinámico:
  1. Agrega otra acción; para ello, haz clic en Agregar paso, escribe outlook en la barra
    de búsqueda y, a continuación, selecciona la acción Responder al correo electrónico:
  1. Configura la nueva acción. Comprueba que Id. del mensaje esté configurado con el
    contenido dinámico, Id. del mensaje, y después escribe la respuesta que deseas enviar
    al destinatario en el cuadro Comentario:
  1. Agrega otra acción, escribe text analytics en la barra de búsqueda y selecciona
    Detectar sentimiento (preview):
  1. Configura la acción de sentimiento, como se muestra en la Figura 11.8; aquí se deben
    utilizar los valores de clave y punto de conexión. Ahora, haz clic en el botón Crear,
    como se muestra en la Figura
  1. Para proporcionar el texto de la acción, agrega contenido dinámico y selecciona la
    variable creada anteriormente, emailContent. A continuación, haz clic en Mostrar
    opciones avanzadas y selecciona es para Idioma:
  1. Luego, agrega una nueva acción al seleccionar Outlook y, a continuación, elige Enviar
    un correo electrónico. Esta acción envía al destinatario original el contenido del
    correo electrónico con la puntuación de la opinión en el asunto. Debe configurarse
    como se muestra en la Figura 11.10. Si la puntuación no está visible en la ventana de
    contenido dinámico, haz clic en el enlace Más información junto a él:
  1. Guarda la aplicación lógica, desplázate de nuevo a la página de información general
    y haz clic en el desencadenador Ejecutar. El desencadenador comprobará si hay
    nuevos correos electrónicos cada 3 minutos, responderá a los remitentes, realizará
    análisis de sentimiento y enviará un correo electrónico al destinatario original.
    Se envía un correo electrónico de ejemplo con connotaciones negativas al id. de
    correo electrónico indicado:
  1. Después de unos segundos, se ejecuta la aplicación lógica y el remitente obtiene la
    siguiente respuesta:
  1. El destinatario original recibe un correo electrónico con la puntuación de la opinión
    y el texto del correo electrónico original, como se muestra en la Figura

A partir de la actividad, hemos podido entender el funcionamiento de una aplicación lógica.
La aplicación se activó cuando se recibió un correo electrónico en la bandeja de entrada del
usuario y el proceso siguió la secuencia de pasos que se dieron en la aplicación lógica. En la
siguiente sección, aprenderás a crear una solución integral mediante tecnologías sin servidor.
Crear una solución integral con tecnologías sin servidor
En esta sección, crearemos una solución integral formada por las tecnologías sin servidor
de las que hemos hablado en las secciones anteriores. El ejemplo siguiente te dará una
idea de cómo se pueden implementar de forma inteligente los flujos de trabajo para evitar
la sobrecarga administrativa. En la siguiente actividad, crearemos un flujo de trabajo para
notificar a los usuarios cuándo se almacenan las claves, los secretos y los certificados en
Azure Key Vault. Vamos a tomar esto como el planteamiento de un problema, a encontrar
una solución, a diseñarla y a implementarla.
Los problemas planteados
El problema que vamos a solucionar aquí es que los usuarios y las organizaciones no
reciben ninguna notificación acerca de la caducidad de los secretos de su almacén de
claves y las aplicaciones se detienen cuando expiran. Los usuarios se quejan de que Azure
no proporciona la infraestructura necesaria para supervisar los secretos, las claves y los
certificados de Key Vault.
Solución
La solución a este problema consiste en combinar varios servicios de Azure e integrarlos para
que los usuarios puedan recibir una notificación de forma proactiva de la caducidad de los
secretos. La solución enviará notificaciones a través de dos canales: correo electrónico y SMS.
Los servicios de Azure que se usan para crear esta solución son los siguientes:

  • Azure Key Vault
  • Azure Active Directory (Azure AD)
  • Azure Event Grid
  • Azure Automation
  • Logic Apps
  • Azure Functions
  • SendGrid
  • Twilio SMS

Ahora que conoces los servicios que se utilizarán como parte de la solución, vamos a seguir
adelante y a crear una arquitectura para esta solución.

Arquitectura
En la sección anterior, hemos explorado la lista de servicios que se utilizarán en la solución.
Si queremos implementar la solución, los servicios deben estar establecidos en el orden
correcto. La arquitectura nos ayudará a desarrollar el flujo de trabajo y a acercarnos más
a la solución.
La arquitectura de la solución comprende varios servicios, como se muestra en la
Figura

Vamos a ver cada uno de estos servicios y a comprender sus roles y la funcionalidad que
proporcionan en la solución general.
Azure Automation
Azure Automation proporciona runbooks; estos runbooks se pueden activar para
ejecutar la lógica mediante PowerShell, Python y otros lenguajes de scripting. Los scripts
se pueden ejecutar on-premises o en el cloud, lo cual proporciona una infraestructura
y recursos enriquecidos para crear scripts. Esos tipos de scripts se conocen como
runbooks. Normalmente, los runbooks implementan un escenario, como detener o iniciar
una máquina virtual, o crear y configurar cuentas de almacenamiento. Es bastante fácil
conectarse al entorno de Azure desde runbooks con la ayuda de activos, como variables,
certificados y conexiones.
En la solución actual queremos conectarnos a Azure Key Vault, leer todos los secretos
y claves almacenados en él y recuperar sus fechas de caducidad. Estas fechas de caducidad
deben compararse con la fecha de hoy y, si la fecha de caducidad es dentro de un mes,
el runbook debe generar un evento personalizado en Event Grid mediante un tema
personalizado de Event Grid.
Para lograrlo, se implementará un runbook de Azure Automation mediante un script de
PowerShell. Junto con el runbook, también se creará un programador que ejecutará el
runbook una vez al día a las 12 de la mañana.

Un tema personalizado de Azure Event Grid
Una vez que el runbook identifique que un secreto o una clave va a caducar en un
mes, se creará un nuevo evento personalizado y se publicará en el tema personalizado
creado específicamente para este propósito. Una vez más, vamos a ver los detalles de
la implementación en la siguiente sección.
Azure Logic Apps
Una aplicación lógica es un servicio sin servidor que proporciona capacidades de flujo
de trabajo. Nuestra aplicación lógica se configurará para que se desencadene cuando se
publique un evento en el tema de Event Grid personalizado. Después de que se desencadene,
invocará el flujo de trabajo y ejecutará todas las actividades una tras otra. Por lo general,
hay varias actividades, pero para el propósito de este ejemplo, invocaremos una función de
Azure que enviará mensajes de correo electrónico y SMS. En una implementación completa,
estas funciones de notificación deben implementarse por separado en funciones de Azure
independientes.
Azure Functions
Azure Functions se usa para notificar a los usuarios y a las partes interesadas la caducidad
de secretos y claves mediante correo electrónico y SMS. SendGrid se usa para enviar correos
electrónicos, mientras que Twilio se usa para enviar mensajes SMS desde Azure Functions.
En la siguiente sección, vamos a echar un vistazo a los requisitos previos antes de
implementar la solución.
Requisitos previos
Necesitará una suscripción a Azure con derechos de colaborador como mínimo. Como
solo estamos implementando servicios en Azure y no se implementan servicios externos,
la suscripción es el único requisito previo. Continuemos e implementemos la solución.
Implementación
Ya debe existir un almacén de claves. Si no existe, debe crearse uno.
Este paso debe realizarse si es necesario aprovisionar una nueva instancia de Azure Key
Vault. Azure proporciona varias formas de aprovisionar recursos. Entre ellos destacan Azure
PowerShell y la CLI de Azure. La CLI de Azure es una interfaz de línea de comandos que
funciona en todas las plataformas. La primera tarea será aprovisionar un almacén de claves
en Azure. En esta implementación, usaremos Azure PowerShell para aprovisionar el almacén
de claves.
Antes de poder usar Azure PowerShell para crear un almacén de claves, es importante
iniciar sesión en Azure para que los comandos subsiguientes puedan ejecutarse
correctamente para crear el almacén de claves.

Paso 1: aprovisionar una instancia de Azure Key Vault
El primer paso es preparar el entorno para la muestra. Esto implica iniciar sesión en Azure
Portal, seleccionar una suscripción adecuada y luego crear un nuevo grupo de recursos de
Azure y un nuevo recurso de Azure Key Vault:

  1. Ejecuta el comando Connect-AzAccount para iniciar sesión en Azure. Se solicitarán las
    credenciales en una nueva ventana.
  2. Después de iniciar sesión correctamente, si hay varias suscripciones disponibles
    para el id. de inicio de sesión, se enumerarán todas. Es importante seleccionar una
    suscripción adecuada; esto puede llevarse a cabo ejecutando el cmdlet Set-AzContext:
    Set-AzContext -SubscriptionId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
  3. Crea un nuevo grupo de recursos en tu ubicación preferida. En este caso, el nombre
    del grupo de recursos es IntegrationDemo y se crea en la región West Europe:
    New-AzResourceGroup -Name IntegrationDemo -Location «West Europe» -Verbose
  4. Crea un nuevo recurso de Azure Key Vault; en este caso, el nombre del almacén
    es keyvaultbook y está habilitado para la implementación, la implementación de
    plantillas, el cifrado de discos, la eliminación temporal y la protección de purgas:
    New-AzKeyVault -Name keyvaultbook -ResourceGroupName
    IntegrationDemo -Location «West Europe» -EnabledForDeployment
    -EnabledForTemplateDeployment -EnabledForDiskEncryption
    -EnablePurgeProtection -Sku Standard – Verbose

Ten en cuenta que el nombre del almacén de claves debe ser único. Es posible que no
puedas usar el mismo nombre para dos almacenes de claves. El comando anterior, cuando
se ejecute correctamente, creará un nuevo recurso de Azure Key Vault. El siguiente paso
es proporcionar acceso a una entidad de servicio en el almacén de claves.
Paso 2: crear una entidad de servicio
En lugar de usar una cuenta individual para realizar la conexión con Azure, Azure proporciona
entidades de servicio que son, básicamente, cuentas de servicio que se pueden usar para
conectarse a Azure Resource Manager y ejecutar actividades. Agregar un usuario a un
directorio/inquilino de Azure hace que esté disponible en todas partes, incluso en todos los
grupos de recursos y recursos debido a la naturaleza de la herencia de seguridad en Azure.
El acceso se debe revocar explícitamente de los grupos de recursos para los usuarios si no
se les permite acceder a ellos. Las entidades de servicio ayudan a asignar acceso y control
granulares a grupos de recursos y recursos y, si es necesario, se les puede dar acceso al
ámbito de la suscripción. También se les puede asignar permisos granulares, como permisos
de lector, colaborador o propietario.

En resumen, las entidades de servicio deben ser el mecanismo preferido para
consumir los servicios de Azure. Se pueden configurar con una contraseña o con una
clave de certificado. Las entidades de servicio se pueden crear mediante el comando
New-AzAdServicePrinicipal, como se muestra a continuación:
$sp = New-AzADServicePrincipal -DisplayName «keyvault-book» -Scope «/
subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx» -Role Owner -StartDate
([datetime]::Now) -EndDate $([datetime]::now.AddYears(1)) -Verbose

Los valores de configuración importantes son el ámbito y el rol. El ámbito determina el área
de acceso de la aplicación de servicio; actualmente se muestra en el nivel de suscripción.
Los valores válidos para el ámbito son los siguientes:
/subscriptions/{subscriptionId}
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/
{resourceProviderNamespace}/{resourceType}/{resourceName}
/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/
providers/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/
{resourceName}

El rol proporciona permisos para el ámbito asignado. Los valores válidos son los siguientes:

  • Propietario
  • Colaborador
  • Lector
  • Permisos específicos de recursos

En el comando anterior, se han proporcionado permisos de propietario a la entidad de
servicio recién creada.
También podemos usar certificados si es necesario. Para simplificar, continuaremos con la
contraseña.
Con la entidad de servicio que hemos creado, el secreto se ocultará. Para descubrir el
secreto, puedes probar los siguientes comandos:
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.
Secret)
$UnsecureSecret = [System.Runtime.InteropServices.
Marshal]::PtrToStringAuto($BSTR)
$UnsecureSecret tendrá tu clave secreta.

Junto con la entidad de servicio, se creará una aplicación de directorio de aplicaciones.
La aplicación actúa como la representación global de nuestra aplicación en todos los
directorios y la entidad es como una representación local de la aplicación. Podemos crear
varias entidades con la misma aplicación en un directorio diferente. Podemos obtener los
detalles de la aplicación creada mediante el comando Get-AzAdApplication. Guardaremos
la salida de este comando en una variable, $app, ya que la necesitaremos más adelante:
$app = Get-AzAdApplication -DisplayName $sp.DisplayName
Ahora hemos creado una entidad de servicio mediante un secreto; otra forma segura de
crear una es usando certificados. En la siguiente sección, crearemos una entidad de servicio
mediante certificados.
Paso 3: crear una entidad de servicio mediante certificados
Para crear una entidad de servicio mediante certificados, se deben ejecutar los siguientes
pasos:

  1. Crear un certificado autofirmado o comprar un certificado: se utiliza un certificado
    autofirmado para crear este ejemplo de aplicación integral. Para las implementaciones
    reales, se debe comprar un certificado válido de una entidad de certificación.
    Para crear un certificado autofirmado, se puede ejecutar el siguiente comando.
    El certificado autofirmado es exportable y se almacena en una carpeta personal
    en el equipo local; también tiene una fecha de caducidad:
    $currentDate = Get-Date
    $expiryDate = $currentDate.AddYears(1)
    $finalDate = $expiryDate.AddYears(1)
    $servicePrincipalName = «https://automation.book.com»
    $automationCertificate = New-SelfSignedCertificate -DnsName
    $servicePrincipalName -KeyExportPolicy Exportable -Provider «Microsoft
    Enhanced RSA and AES Cryptographic Provider» -NotAfter $finalDate
    -CertStoreLocation «Cert:\LocalMachine\My»
  1. Exportar el certificado recién creado: el nuevo certificado se debe exportar al
    sistema de archivos para que luego se pueda cargar a otros destinos, como Azure AD,
    para crear una entidad de servicio.
    A continuación, se muestran los comandos usados para exportar el certificado en
    el sistema de archivos local. Ten en cuenta que este certificado tiene claves tanto
    públicas como privadas, por lo que mientras se exporta, debe protegerse con una
    contraseña que debe ser una cadena segura:

$securepfxpwd = ConvertTo-SecureString -String ‘password’ -AsPlainText
-Force # Password for the private key PFX certificate
$cert1 = Get-Item -Path Cert:\LocalMachine\My\$($automationCertificate.
Thumbprint)
Export-PfxCertificate -Password $securepfxpwd -FilePath » C:\
azureautomation.pfx» -Cert $cert1

El cmdlet Get-Item lee el certificado del almacén de certificados y lo almacena en la
variable $cert1. Realmente, el cmdlet Export-PfxCertificate exporta el certificado del
almacén de certificados en el sistema de archivos. En este caso, en la carpeta C:\book.

  1. Leer el contenido del archivo PFX creado recientemente: se crea un objeto de
    X509Certificate2 para retener el certificado en memoria; además, los datos se
    convierten en una cadena Base64 con la función System.Convert:
    $newCert = New-Object System.Security.Cryptography.X509Certificates.
    X509Certificate2 -ArgumentList «C:\azureautomation.pfx», $securepfxpwd
    $newcertdata = [System.Convert]::ToBase64String($newCert.GetRawCertData())

    Vamos a usar esta misma entidad para realizar la conexión con Azure desde la cuenta
    de Azure Automation. Es importante que los valores de huella digital de certificado,
    id. de suscripción, id. de inquilino e id. de aplicación se almacenen en una ubicación
    temporal para que puedan usarse para configurar los recursos siguientes:
    $adAppName = «azure-automation-sp»
    $ServicePrincipal = New-AzADServicePrincipal -DisplayName $adAppName
    -CertValue $newcertdata -StartDate $newCert.NotBefore -EndDate $newCert.
    NotAfter
    Sleep 10
    New-AzRoleAssignment -ServicePrincipalName $ServicePrincipal.ApplicationId
    -RoleDefinitionName Owner -Scope /subscriptions/xxxxx-xxxxxxx-xxxxxxxxxxxxx

Tenemos nuestra entidad de servicio lista. El almacén de claves que hemos creado no
tiene un conjunto de políticas de acceso, lo que significa que ningún usuario o aplicación
podrán acceder al almacén. En el siguiente paso, concederemos permisos a la aplicación
de directorio de aplicaciones que creamos para acceder al almacén de claves.
Paso 4: crear una política de almacén de claves
En esta fase, hemos creado la entidad de servicio y el almacén de claves. Sin embargo,
la entidad de servicio aún no tiene acceso al almacén de claves. Esta entidad de servicio
se usará para consultar y enumerar todos los secretos, claves y certificados del almacén
de claves y debe tener los permisos necesarios para hacerlo.

Para proporcionar el permiso de entidad de servicio recién creado para poder acceder
al almacén de claves, volveremos a la consola de Azure PowerShell y ejecutaremos
el siguiente comando:
Set-AzKeyVaultAccessPolicy -VaultName keyvaultbook -ResourceGroupName
IntegrationDemo -ObjectId $ServicePrincipal.Id -PermissionsToKeys get,list,create
-PermissionsToCertificates get,list,import -PermissionsToSecrets get,list -Verbose

En referencia al bloque de comandos anterior, echa un vistazo a los siguientes puntos:

  • Set-AzKeyVaultAccessPolicy proporciona permisos de acceso a los usuarios, grupos
    y entidades de servicio. Acepta el nombre del almacén de claves y el id. de objeto de
    entidad de servicio. Este objeto es diferente del id. de la aplicación. La salida de la
    entidad de servicio contiene una propiedad Id, como se muestra a continuación:

PermissionsToKeys proporciona acceso a las claves del almacén de claves y se
proporcionan los permisos get, list y create para esta entidad de servicio.
No se proporciona ningún permiso de escritura o actualización a esta entidad.

  • PermissionsToSecrets proporciona acceso a los secretos del almacén de claves y se
    proporcionan los permisos get y list para esta entidad de servicio. No se proporciona
    ningún permiso de escritura o actualización a esta entidad.
  • PermissionsToCertificates proporciona acceso a los secretos del almacén de claves
    y se proporcionan los permisos get, import y list para esta entidad de servicio. No se
    proporciona ningún permiso de escritura o actualización a esta entidad.

En este punto, hemos configurado la entidad de servicio para que funcione con Azure Key
Vault. La siguiente parte de la solución es crear una cuenta de Automation.
Paso 5: crear una cuenta de Automation
Al igual que antes, usaremos Azure PowerShell para crear una nueva cuenta de Azure
Automation en un grupo de recursos. Antes de crear un grupo de recursos y una
cuenta de Automation, se debe establecer una conexión a Azure. Sin embargo, esta vez,
usa las credenciales para que la entidad de servicio se conecte a Azure. Los pasos son
los siguientes:

  1. El comando para conectarse a Azure mediante la aplicación de servicio es el siguiente.
    El valor se toma de las variables que inicializamos en los pasos anteriores:
    Login-AzAccount -ServicePrincipal -CertificateThumbprint $newCert.
    Thumbprint -ApplicationId $ServicePrincipal.ApplicationId -Tenant «xxxxxxxxxx-
    xxxxx-xxxxx»
  2. Para asegurarte de tener acceso, marca Get-AzContext como se muestra a continuación.
    Toma nota del id. de suscripción, ya que será necesario en los siguientes comandos:
    Get-AzContext
  3. Después de realizar la conexión con Azure, se debe crear un nuevo recurso que
    contenga los recursos de la solución y una nueva cuenta de Azure Automation.
    Al grupo de recursos asígnale el nombre VaultMonitoring y créalo en la región
    West Europe. También vas a crear el resto de los recursos en este grupo de recursos:
    $IntegrationResourceGroup = «VaultMonitoring»
    $rgLocation = «West Europe»
    $automationAccountName = «MonitoringKeyVault»
    New-AzResourceGroup -name $IntegrationResourceGroup -Location $rgLocation
    New-AzAutomationAccount -Name $automationAccountName -ResourceGroupName
    $IntegrationResourceGroup -Location $rgLocation -Plan Free
  4. A continuación, crea tres variables de automatización. Los valores de estas variables,
    es decir, id. de suscripción, id. de inquilino e id. de aplicación ya deberían estar
    disponibles mediante los pasos anteriores:
    New-AzAutomationVariable -Name «azuresubscriptionid»
    -AutomationAccountName $automationAccountName -ResourceGroupName
    $IntegrationResourceGroup -Value » xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx «
    -Encrypted $true
    New-AzAutomationVariable -Name «azuretenantid» -AutomationAccountName
    $automationAccountName -ResourceGroupName $IntegrationResourceGroup -Value
    » xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx » -Encrypted $true
    New-AzutomationVariable -Name «azureappid» -AutomationAccountName
    $automationAccountName -ResourceGroupName $IntegrationResourceGroup -Value
    » xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx » -Encrypted $true
  1. Ahora es el momento de cargar un certificado, que se usará para conectarse a Azure
    desde Azure Automation:
    $securepfxpwd = ConvertTo-SecureString -String ‘password’ -AsPlainText
    -Force # Password for the private key PFX certificate
    New-AzAutomationCertificate -Name «AutomationCertifcate» -Path «C:\book\
    azureautomation.pfx» -Password $securepfxpwd -AutomationAccountName
    $automationAccountName -ResourceGroupName $IntegrationResourceGroup
  2. El siguiente paso es instalar los módulos de PowerShell relacionados con Key Vault
    y Event Grid en la cuenta de Azure Automation, ya que estos módulos no se instalan
    de manera predeterminada.
  3. En Azure Portal, para desplazarte hasta el grupo de recursos VaultMonitoring ya
    creado, haz clic en Grupos de recursos en el menú de la izquierda.
  4. Haz clic en la cuenta de Azure Automation ya aprovisionada, MonitoringKeyVault,
    y en Módulos en el menú de la izquierda. El módulo de Event Grid es dependiente
    del módulo Az.profile; por este motivo, tenemos que instalarlo antes del módulo
    Event Grid.
  5. Haz clic en Examinar la galería en el menú superior y escribe Az.profile en el cuadro
    de búsqueda, como se muestra en la Figura
  1. En los resultados de búsqueda, selecciona Az.Profile y haz clic en el botón Importar
    en el menú superior. Finalmente, haz clic en el botón Aceptar. Este paso tarda unos
    segundos en completarse. Tras unos segundos, el módulo debe instalarse.
  1. El estado de la instalación se puede comprobar en el elemento de menú Módulo. En la
    Figura se muestra cómo podemos importar un módulo:
  1. Vuelve a realizar los pasos 9, 10 y 11 para importar e instalar el módulo Az.EventGrid.
    Si aparece una advertencia para instalar cualquier dependencia antes de continuar,
    sigue adelante e instala primero las dependencias.
  2. Vuelve a realizar los pasos 9, 10 y 11 para importar e instalar el módulo Az.KeyVault.
    Si aparece una advertencia para instalar cualquier dependencia antes de continuar,
    sigue adelante e instala primero la dependencia.

Puesto que hemos importado los módulos necesarios, vamos a seguir adelante y a crear el
tema de Event Grid.

Paso 6: crear un tema de Event Grid
Si recuerdas la arquitectura que hemos utilizado, necesitamos un tema de Event Grid.
Vamos a crear uno.
El comando que se usa para crear un tema de Event Grid con PowerShell es el siguiente:
New-AzEventGridTopic -ResourceGroupName VaultMonitoring -Name
azureforarchitects-topic -Location «West Europe»
El proceso de creación de un tema de Event Grid mediante Azure Portal es el siguiente:

  1. En Azure Portal, para desplazarte hasta el grupo de recursos Vaultmonitoring ya
    creado, haz clic en Grupos de recursos en el menú de la izquierda.
  2. A continuación, haz clic en el botón + Agregar y busca Event Grid Topic en el cuadro
    de búsqueda. Selecciónalo y luego haz clic en el botón Crear.
  3. Para rellenar los valores adecuados en el formulario resultante, proporciona un
    nombre, selecciona una suscripción y selecciona el grupo de recursos recién creado,
    la ubicación y el esquema de eventos.

Como ya hemos comentado, el tema de Event Grid proporciona un punto de conexión al
que el origen enviará los datos. Como ya tenemos nuestro tema listo, vamos a preparar la
cuenta de Automation de origen.
Paso 7: configurar el runbook
Este paso se centrará en la creación de una cuenta de Azure Automation y los runbooks
de PowerShell que contendrán la lógica principal de lectura de los almacenes de claves
de Azure y en recuperar los secretos almacenados. Los pasos necesarios para configurar
Azure Automation son los siguientes:

  1. Crear el runbook de Azure Automation: en Azure Portal, para desplazarte hasta el
    grupo de recursos Vaultmonitoring recién creado, haz clic en Grupos de recursos
    en el menú de la izquierda.
  2. Haz clic en la cuenta de Azure Automation ya aprovisionada, MonitoringKeyVault.
    A continuación, haz clic en Runbooks en el menú de la izquierda y en +Agregar un
    runbook en el menú superior.
  3. Haz clic en Crear un nuevo runbook y escribe un nombre. Vamos a llamar a este
    runbook CheckExpiredAssets; a continuación, establecemos el Tipo de runbook
    en PowerShell:
  1. Codificar el runbook: declara algunas variables para retener la información de huella
    digital de certificado, id. de suscripción, id. de inquilino e id. de aplicación. Estos
    valores se deben almacenar en variables de Azure Automation y el certificado se debe
    cargar en certificados de Automation. La clave utilizada para el certificado cargado es
    AutomationCertifcate. Los valores se recuperan de estos almacenes y se asignan a las
    variables, como se muestra a continuación:
    $subscriptionID = get-AutomationVariable «azuresubscriptionid»
    $tenantID = get-AutomationVariable «azuretenantid»
    $applicationId = get-AutomationVariable «azureappid»
    $cert = get-AutomationCertificate «AutomationCertifcate»
    $certThumbprint = ($cert.Thumbprint).ToString()
  2. El siguiente código dentro del runbook ayuda a iniciar sesión en Azure utilizando la
    entidad de servicio con los valores de las variables declaradas anteriormente. Además,
    el código selecciona una suscripción adecuada. El código se muestra a continuación:
    Login-AzAccount -ServicePrincipal -CertificateThumbprint $certThumbprint
    -ApplicationId $applicationId -Tenant $tenantID
    Set-AzContext -SubscriptionId $subscriptionID

Puesto que Azure Event Grid se aprovisionó en el paso 6 de esta sección, su punto
de conexión y las claves se recuperan utilizando los cmdlets Get-AzEventGridTopic
y Get-AzEventGridTopicKey.

Azure Event Grid genera dos claves: una principal y una secundaria. La primera
referencia clave se toma de la siguiente manera:
$eventGridName = «ExpiredAssetsKeyVaultEvents»
$eventGridResourceGroup = «VaultMonitoring»
$topicEndpoint = (Get-AzEventGridTopic -ResourceGroupName
$eventGridResourceGroup -Name $eventGridName).Endpoint
$keys = (Get-AzEventGridTopicKey -ResourceGroupName
$eventGridResourceGroup -Name $eventGridName ).Key1

  1. A continuación, todos los almacenes de claves que se aprovisionaron en la suscripción
    se recuperan mediante la iteración. Durante el bucle, todos los secretos se recuperan
    con el cmdlet Get-AzKeyVaultSecret.
    La fecha de caducidad de cada secreto se compara con la fecha actual; si la diferencia
    es inferior a un mes, genera un evento de Event Grid y lo publica utilizando el
    comando invoke-webrequest.
    Se ejecutan los mismos pasos para los certificados almacenados en el almacén de claves.
    El cmdlet utilizado para recuperar todos los certificados es Get-AzKeyVaultCertificate.
    El evento que se publica en Event Grid debe estar en la matriz JSON. El mensaje
    generado se convierte a JSON mediante el cmdlet ConvertTo-Json y luego se convierte
    en una matriz mediante la adición de [ y ] como prefijo y sufijo.
    Para poder conectarse a Azure Event Grid y publicar el evento, el remitente debe
    proporcionar la clave en el encabezado. Se producirá un error en la solicitud si faltan
    estos datos en la carga de solicitud:
    $keyvaults = Get-AzureRmKeyVault
    foreach($vault in $keyvaults) {
    $secrets = Get-AzureKeyVaultSecret -VaultName $vault.VaultName
    foreach($secret in $secrets) {
    if( ![string]::IsNullOrEmpty($secret.Expires) ) {
    if($secret.Expires.AddMonths(-1) -lt [datetime]::Now)
    {
    $secretDataMessage = @{
    id = [System.guid]::NewGuid()
    subject = «Secret Expiry happening soon !!»
    eventType = «Secret Expiry»
    eventTime = [System.DateTime]::UtcNow
    data = @{
    «ExpiryDate» = $secret.Expires
    «SecretName» = $secret.Name.ToString()
    «VaultName» = $secret.VaultName.ToString()

«SecretCreationDate» = $secret.Created.ToString()
«IsSecretEnabled» = $secret.Enabled.ToString()
«SecretId» = $secret.Id.ToString()
}
}

Invoke-WebRequest -Uri $topicEndpoint -Body $finalBody -Headers $header
-Method Post -UseBasicParsing
}
}
Start-Sleep -Seconds 5
}
}

  1. Para publicar el runbook, haz clic en el botón Publicar, como se muestra en la
    Figura
  1. Programador: crea un activo de programador de Azure Automation para ejecutar este
    runbook una vez al día a las 12 de la mañana. Haz clic en Programaciones en el menú
    de la izquierda de Azure Automation y en +Agregar una programación en el menú
    superior.
  2. Proporciona la información de programación en el formulario resultante.
    Este es el último paso de configuración de la cuenta de Azure Automation.

Paso 8: trabajar con SendGrid
En este paso, vamos a crear un nuevo recurso de SendGrid. El recurso de SendGrid se utiliza
para enviar correos electrónicos desde la aplicación sin tener que instalar un servidor del
tipo Protocolo simple de transferencia de correo (SMTP). Proporciona una API de REST y
un kit de desarrollo de software (SDK) de C#; con ello, es relativamente fácil enviar correos
masivos. En la solución actual, Azure Functions se usará para invocar las API de SendGrid
para enviar correos electrónicos, por lo que este recurso debe aprovisionarse. Este recurso
tiene un cálculo del coste independiente y no se cubre como parte del coste de Azure;
hay un nivel gratuito disponible que se puede utilizar para enviar correos electrónicos:

  1. Un recurso de SendGrid se crea igual que cualquier otro recurso de Azure. Al buscar
    sendgrid obtendremos Entrega de correo electrónico de SendGrid en los resultados.
  2. Selecciona el recurso y haz clic en el botón Crear para abrir su formulario de
    configuración.
  3. Selecciona un nivel de precios adecuado.
  4. Proporciona los datos de contacto apropiados.
  5. Marca la casilla de verificación Términos de uso.
  6. Completa el formulario y haz clic en el botón Crear.
  7. Después de aprovisionar el recurso, haz clic en el botón Administrar en el
    menú superior; se abrirá el sitio web de SendGrid. El sitio web puede solicitar la
    configuración de correo electrónico. A continuación, selecciona Claves de API en
    la sección Configuración y haz clic en el botón Crear clave de API:
  1. En la ventana resultante, selecciona Acceso completo y haz clic en el botón Crear
    y ver. Esto creará la clave para el recurso de SendGrid; anota esta clave, ya que se
    usará con la configuración de Azure Functions para SendGrid:

Ahora que hemos configurado los niveles de acceso para SendGrid, vamos a configurar otro
servicio de terceros, que se llama Twilio.
Paso 9: introducción a Twilio
En este paso, vamos a crear una nueva cuenta de Twilio. Twilio se utiliza para enviar
mensajes SMS masivos. Para crear una cuenta con Twilio, dirígete a twillio.com y crea una
nueva cuenta. Después de crear la cuenta correctamente, se genera un número de teléfono
móvil que se puede usar para enviar mensajes SMS a los receptores:

La cuenta de Twilio proporciona claves de producción y de prueba. Copia la clave de prueba
y el token en una ubicación temporal, como el Bloc de notas, ya que más adelante serán
necesarios en Azure Functions:

Contamos con SendGrid y Twilio para el servicio de notificaciones; sin embargo,
necesitamos algo que pueda llevar el evento y notificar a los usuarios. Aquí interviene el
rol de una aplicación de función. En la siguiente sección, vamos a crear una aplicación de
función que ayudará a enviar SMS y correos electrónicos.

Paso 10: configuración de una aplicación de función
En este paso, crearemos una nueva aplicación de función responsable del envío de correos
electrónicos y notificaciones por SMS. El objetivo de la aplicación de función dentro de la
solución es enviar mensajes de notificación a los usuarios sobre la caducidad de los secretos
del almacén de claves. Una sola función será responsable de enviar correos electrónicos y
mensajes SMS. Ten en cuenta que esto podría haberse dividido en dos funciones separadas.
El primer paso es crear una nueva aplicación de función y alojar una función dentro de ella:

  1. Como hemos hecho antes, desplázate hasta el grupo de recursos, haz clic en el botón
  • Agregar en el menú superior y busca el recurso function app. A continuación, haz
    clic en el botón Crear para obtener el formulario Aplicación de función.
  1. Rellena el formulario Aplicación de función y haz clic en el botón Crear. El nombre de
    la aplicación de función debe ser único en Azure.
  2. Una vez aprovisionada la aplicación de función, crea una función nueva denominada
    SMSandEMailFunction haciendo clic en el botón + junto al elemento Funciones en el
    menú de la izquierda. A continuación, selecciona En el portal en el panel central.
  3. Selecciona Desencadenador de HTTP y asígnale el nombre SMSandEMailFunction.
    A continuación, haz clic en el botón Crear; la opción Nivel de autorización puede
    ser cualquier valor.
  4. Selecciona Desencadenador de HTTP y asígnale el nombre SMSandEMailFunction.
    A continuación, haz clic en el botón Crear; la opción Nivel de autorización puede
    ser cualquier valor.

  5. Elimina el código predeterminado, reemplázalo por el código que se muestra en la
    siguiente lista y, a continuación, haz clic en el botón Guardar en el menú superior:

    #r «SendGrid»
    #r «Newtonsoft.Json»
    #r «Twilio.Api»

using System.Net;
using System;
using SendGrid.Helpers.Mail;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;
using Twilio;
using System.Configuration;
public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter
log, out Mail message,out SMSMessage sms)
{
log.Info(«C# HTTP trigger function processed a request.»);
string alldata = req.Content.ReadAsStringAsync().GetAwaiter().GetResult();
message = new Mail();
var personalization = new Personalization();
personalization.AddBcc(new Email(ConfigurationManager.
AppSettings[«bccStakeholdersEmail»]));

personalization.AddTo(new Email(ConfigurationManager.
AppSettings[«toStakeholdersEmail»]));
var messageContent = new Content(«text/html», alldata);
message.AddContent(messageContent);
message.AddPersonalization(personalization);
message.Subject = «Key Vault assets Expiring soon..»;
message.From = new Email(ConfigurationManager.AppSettings[«serviceEmail»]);
string msg = alldata;
sms = new SMSMessage();
sms.Body = msg;
sms.To = ConfigurationManager.AppSettings[«adminPhone»];
sms.From = ConfigurationManager.AppSettings[«servicePhone»];
return req.CreateResponse(HttpStatusCode.OK, «Hello «);
}

  1. Haz clic en el nombre de la aplicación de función en el menú de la izquierda y haz clic
    de nuevo en el enlace Configuración de la aplicación en la ventana principal:
  1. Desplázate hasta la sección Configuración de la aplicación, como se muestra
    en la Figura 11.24, y agrega algunas entradas haciendo clic en + Agregar nueva
    configuración para cada entrada.
    Ten en cuenta que las entradas tienen la forma de pares clave-valor; los valores deben
    ser valores reales en tiempo real. adminPhone y servicePhone deben estar configurados
    en el sitio web de Twilio. servicePhone es el número de teléfono generado por Twilio
    que se utiliza para enviar mensajes SMS; adminPhone es el número de teléfono del
    administrador al que se debe enviar el SMS.
    Ten en cuenta también que Twilio espera que el número de teléfono de destino tenga
    un formato concreto en función del país (para la India, el formato es +91 xxxxx xxxxx).
    Ten en cuenta los espacios y el código de país.
    También es necesario agregar las claves para SendGrid y Twilio dentro de la
    configuración de la aplicación. Esta configuración se menciona en la siguiente lista.
    Es posible que ya tengas estos valores a mano debido a las actividades realizadas en
    los pasos anteriores:
  • El valor de SendGridAPIKeyAsAppSetting es la clave de SendGrid.
  • TwilioAccountSid es el identificador del sistema para la cuenta de Twilio.
    Este valor ya se ha copiado y almacenado en una ubicación temporal en el
    Paso 9: introducción a Twilio.
  • TwilioAuthToken es el token para la cuenta de Twilio. Este valor ya se copió
    y almacenó en una ubicación temporal en un paso anterior.

8. Para guardar la configuración, haz clic en el botón Guardar en el menú superior:

  1. Haz clic en el enlace Integrar en el menú de la izquierda justo debajo del nombre de la
    función y, a continuación, haz clic en + Nueva salida. Esto sirve para agregar una salida
    para el servicio de SendGrid:
  1. A continuación, selecciona SendGrid; es probable que te pida que instales la extensión
    de SendGrid. Instala la extensión, que tardará un par de minutos:
  1. Después de instalar la extensión, aparece el formulario de configuración de salida.
    Los elementos de configuración importantes en este formulario son Nombre
    del parámetro del mensaje y Configuración de la aplicación de la clave de API
    de SendGrid (SendGrid API Key App Setting). Deja el valor predeterminado
    de Nombre del parámetro del mensaje y haz clic en la lista desplegable para
    seleccionar SendGridAPIKeyAsAppSetting como la clave de configuración de
    la aplicación de la API. Esto ya se configuró en un paso anterior en la configuración
    de la aplicación. El formulario debe estar configurado como se muestra en la
    Figura 11.28; a continuación, tienes que hacer clic en el botón Guardar:
  1. Haz clic de nuevo en + Nueva salida para agregar una salida para el servicio Twilio.
  2. A continuación, selecciona Twilio SMS. Es posible que te pida que instales la extensión
    de Twilio SMS. Instala la extensión, que tardará un par de minutos.
  3. Después de instalar la extensión, aparece el formulario de configuración de salida.
    Los elementos de configuración importantes de este formulario son Nombre del
    parámetro del mensaje, Configuración de SID de cuenta y Configuración de token
    de autorización. Cambia el valor predeterminado de Nombre del parámetro del
    mensaje por sms. Esto se hace porque el parámetro message ya se utiliza para el
    parámetro de servicio de SendGrid. Asegúrate de que el valor de Configuración de SID
    de cuenta es TwilioAccountSid y el valor de Configuración de token de autorización
    es TwilioAuthToken. Estos valores ya se configuraron en un paso anterior de la
    configuración de la aplicación. El formulario debe estar configurado como se muestra
    en la Figura 11.29; a continuación, debes hacer clic en Guardar:

Nuestras cuentas de SendGrid y Twilio están listas. Ahora es el momento de usar los
conectores y agregarlos a la aplicación lógica. En la siguiente parte, crearemos la aplicación
lógica y usaremos conectores para trabajar con los recursos que hemos creado hasta ahora.
Paso 11: crear una aplicación lógica
En este paso, vamos a crear un nuevo flujo de trabajo de aplicación lógica. Hemos creado
un runbook de Azure Automation que consulta todos los secretos en todos los almacenes de
claves y publica un evento si alguno de ellos caduca dentro de un mes. El flujo de trabajo de
la aplicación lógica actúa como suscriptor de estos eventos:

  1. El primer paso en el menú de Logic App es crear un flujo de trabajo de aplicación
    lógica.
  2. Rellena el formulario resultante después de hacer clic en el botón Crear. Estamos
    aprovisionando la aplicación lógica en el mismo grupo de recursos que los otros
    recursos de esta solución.
  3. Después de aprovisionar la aplicación lógica, se abre la ventana del diseñador.
    Selecciona Aplicación lógica en blanco en la sección Plantillas.
  4. En la ventana resultante, agrega un desencadenador que pueda suscribirse a Event
    Grid. Logic Apps proporciona un desencadenador para Event Grid y puedes buscarlo
    para ver si está disponible.
  1. A continuación, selecciona el desencadenador Cuando se produce un evento de
    recursos (preview):
  1. En la ventana resultante, selecciona Conectar con la entidad de servicio.
    Proporciona los detalles de la entidad de servicio, incluidos el id. de aplicación
    (Id. de cliente), el id. de inquilino y la contraseña. Este desencadenador no acepta
    una entidad de servicio que se autentica con el certificado: acepta una entidad de
    servicio solo con una contraseña. En esta fase, crea una nueva entidad de servicio
    que se autentique con una contraseña (los pasos para crear una entidad de servicio
    basada en autenticación de contraseña se describieron anteriormente en el paso 2)
    y utiliza los datos de la entidad de servicio recién creada para la configuración de
    Azure Event Grid, como se muestra en la Figura
  1. Selecciona la suscripción. En función del ámbito de la entidad de servicio, esta se rellena
    automáticamente. Selecciona Microsoft.EventGrid.Topics como valor de Tipo de recurso
    y establece el nombre del tema personalizado como ExpiredAssetsKeyVaultEvents:
  1. El paso anterior creará un conector; la información de conexión se cambiará al hacer
    clic en Cambiar conexión.
  2. La configuración final del desencadenador de Event Grid debe ser similar a la de la
    Figura
  1. Agrega una nueva actividad Analizar JSON después del desencadenador de Event Grid;
    esta actividad necesita el esquema JSON. Por lo general, el esquema no está disponible,
    pero esta actividad ayuda a generar el esquema si se le proporciona un JSON válido:
  1. Haz clic en Usar una carga de ejemplo para generar el esquema y proporciona los
    datos siguientes:
    {
    «ExpiryDate»: «»,
    «SecretName»: «»,
    «VaultName»: «»,
    «SecretCreationDate»: «»,
    «IsSecretEnabled»: «»,
    «SecretId»: «»
    }

Aquí puede surgir una pregunta con respecto a la carga de muestra. En este punto,
¿cómo calculas cuál es la carga que genera el publicador de Event Grid? La respuesta
a esta pregunta radica en el hecho de que esta carga de muestra es exactamente la
misma que se utiliza en el elemento de datos en el runbook de Azure Automation.
Puedes volver a echar un vistazo a ese fragmento de código:
data = @{
«ExpiryDate» = $certificate.Expires
«CertificateName» = $certificate.Name.ToString()
«VaultName» = $certificate.VaultName.ToString()
«CertificateCreationDate» = $certificate.Created.ToString()
«IsCertificateEnabled» = $certificate.Enabled.ToString()
«CertificateId» = $certificate.Id.ToString()
}

  1. El cuadro Contenido debe incluir contenido dinámico del desencadenador anterior,
    como se muestra en la Figura
  1. Agrega otra acción de Azure Functions después de Analizar JSON y, a continuación,
    selecciona Seleccionar una función de Azure. Selecciona las aplicaciones de función
    de Azure denominadas NotificationFunctionAppBook y SMSAndEmailFunction,
    que se crearon anteriormente:
  1. Haz clic en el área de texto Cuerpo de la solicitud y rellénala con el siguiente código.
    Esto se hace para convertir los datos en JSON antes de enviaros a la función de Azure:
    {
    «alldata» :
    }
  2. Sitúa el cursor después de «:» en el código anterior y haz clic en Agregar contenido
    dinámico | Cuerpo de la actividad anterior:

16. Guarda toda la aplicación lógica; debe tener el aspecto siguiente:

Una vez que guardas la aplicación lógica, la solución está lista para probarla. Si no tienes
claves o secretos, intenta agregarlos con una fecha de caducidad para que puedas confirmar
si tu solución funciona.
Pruebas
Carga algunos secretos y certificados con fechas de caducidad en Azure Key Vault y ejecuta
el runbook de Azure Automation. El runbook está programado para ejecutarse según una
programación. Además, el runbook publicará eventos en Event Grid. La aplicación lógica
debe habilitarse y escogerá el evento; por último, invocará la función de Azure para enviar
notificaciones por correo electrónico y SMS.
El correo electrónico debe tener el siguiente aspecto:

En este ejercicio, hemos tenido un problema, hemos diseñado una solución y la hemos
implementado. Esto es exactamente lo que sucede en el rol de un arquitecto. Los clientes
tendrán requisitos específicos y, en función de estos, debes desarrollar una solución. Dicho
esto, vamos a finalizar este capítulo. Hagamos un breve resumen de lo que hemos tratado.
Resumen
En este capítulo hemos presentado Logic Apps y hemos mostrado una solución integral
que utiliza varios servicios de Azure. El capítulo se ha centrado en gran medida en la
creación de una arquitectura que integraba varios servicios de Azure para crear una
solución integral. Los servicios utilizados en la solución han sido Azure Automation,
Azure Logic Apps, Azure Event Grid, Azure Functions, SendGrid y Twilio. Estos ser vicios
se han implementado a través de Azure Portal y PowerShell con entidades de servicio
como cuentas de servicio. En el capítulo, también se han mostrado varias maneras de
crear entidades de servicio con autenticación de contraseña y certificado.
La solución a un problema se puede encontrar de varias formas. Podrías usar un
desencadenador de Outlook en una aplic ación lógica en lugar de SendGrid. Habrá
muchas soluciones para un problema; la que elijas dependerá del enfoque que adoptes.
Cuanto más familiarizado estés con los servicios, mayor será el número de opciones
que tengas. En el siguiente capítulo, aprenderás la importancia de los eventos tanto
en Azure como en la arquitectura de aplicaciones de Azure.