[Azure] Procesando AAS a través de un “webhook” por Data Factory

¡Hola! Mi nombre es Matías Deheza, Managing Director en Pi Data Strategy & Consulting. No esta demás comentar que comparto el gusto por el estudio de los datos y el cómo generar valor agregado a partir de estos de hace ya 5 años. Es así como me he nutrido, principalmente, de experiencias que buscaré compartir con todos. 

Me especializo en Azure y Arquitecturas de datos Cloud, de las cuales voy a compartir o contar algunas consideraciones técnicas interesantes a la hora de trabajar en estas arquitecturas. ¡Comencemos nomas!

Uno de los grandes atributos de Data Factory es su capacidad para orquestar múltiples componentes de Azure en un flujo de datos integral. Cuando empezamos a trabajar con datos, y particularmente con Analysis Services, se vuelve necesario que data Factory ejecute el procesamiento de este bajo ciertos parámetros. El procesamiento de Analysis Services será una actividad dentro de nuestro Pipeline y probablemente luego de esta sigan otras, por ende, es necesario que Data Factory reciba un aviso cuando el procesamiento haya finalizado.

Este post pretende mostrarles como disparar ese procesamiento y posteriormente como Data Factory espera por esa respuesta.

Como paso inicial es recomendable que hagan esto https://docs.microsoft.com/es-es/azure/analysis-services/analysis-services-refresh-azure-automation#authentication. Desde el punto "Authentication" hasta el punto "Diseño de un runbook de automation" inclusive.

Consumo con Data Factory

Para consumir el runbook creado con Data Factory, primero se debe crear un webhook para ese runbook. Este proporcionará una URL a la que se puede llamar a través de una actividad del tipo "Webhook" de Data Factory.

1-      En el runbook previamente creado, haga click en Webhooks, y posteriormente en Add Webhook.

image

2-      Asigne un nombre y luego copie la URL generada:

image

3-      En Data Factory cree una actividad Webhook dentro de un pipeline

image

La URL es la dirección URL creada a partir del webhook.

El cuerpo es un documento JSON que debe contener las siguientes propiedades:

Ejemplo del cuerpo de JSON:

{

  "AnalysisServicesDatabaseName": "AdventureWorksDB",

  "AnalysisServicesServer": "asazure://westeurope.asazure.windows.net/MyAnalysisServer",

   "DatabaseRefreshType": "Full"

}

Estos parámetros se definen en el script de PowerShell del runbook. Cuando se ejecuta la actividad web, la carga de JSON que se pasa es WEBHOOKDATA.

Esto se deserializa y se almacena como parámetros de PowerShell, que luego usa el comando Invoke-ProcesASDatabase PowerShell.

LO MAS IMPORTANTE y que diferencia una actividad "Webhook" de una "Web" es el último check de la imagen que dice "Report status on callback". Este check hará que Data Factory espere una respuesta por parte del runbook en orden de seguir con las actividades consecuentes.

Para que esto funcione debemos entender que es lo que hace Data Factory cuando esto se activa.

Data Factory con la llamada al webhook también envía un "callBackUri", es decir, una URL a la cual podemos llamar para avisar que la ejecución del runbook fue exitosa. Para poder hacer uso de esto debemos agregar una nueva porción de código en nuestro runbook:

image

A continuación, les dejo el código escrito el código:

$_callBackUri = $atmParameters.callBackUri

if ($_callBackUri)

 {

    Invoke-WebRequest -Uri $_callBackUri -Method POST -UseBasicParsing

 }

 Si hasta aquí me he explicado correctamente, tras correr la actividad en Data Factory deberán obtener una respuesta de la misma fue ejecutada correctamente.

image

Con esto concluiría nuestra actualización y control. 

Escrito por Matías Deheza.