Azure Functions

Serverless Computing - Azure Functions

Aunque suene un poco contradictorio, el concepto de Serverless no significa que no hay un servidor, en realidad hace referencia a que no hay ning煤n servidor del que debemos preocuparnos. 脡sta idea se asemeja bastante a lo que es Paas, aunque en realidad es un nuevo concepto que lo lleva a otro nivel.

B谩sicamente es una abstracci贸n en la que solo debemos preocuparnos de que el c贸digo funcione correctamente y no sobre que plataforma (o servidor) se ejecuta. En pocas palabras, Azure Functions nos permite utilizar Azure para ejecutar c贸digo permitiendo elegir entre varios lenguajes:

  • Bash
  • Batch
  • C#
  • F#
  • JavaScript
  • PHP
  • PowerShell
  • Python

Ahora bien, no debemos perder de vista que Azure Functions permite ejecutar peque帽as piezas de c贸digo (funciones) en la nube. Vamos a considerar su uso para realizar tareas de procesamientos, solicitudes o mantenimiento de archivos logrando como consecuencia integrar sistemas, trabajar con Internet of Things (IoT) o construir APIs o microservicios.

Crear nuestra primera Azure Function

Antes de comenzar a escribir nuestra primer funci贸n es necesario contar con una suscripci贸n de Azure, en caso de no contar con una activa les comparto un enlace para que puedan crear una.

Teniendo nuestra suscripci贸n activa vamos a acceder al portal de Azure Functions con las credenciales de Azure para poder comenzar a trabajar:

Azure Functions

Para este ejemplo nombr茅 la funci贸n como PacktpubNotifier como consecuencia a un requerimiento que pretendo resolver con Azure Functions y es el siguiente:

La editorial Packtpub todos los d铆as ofrece un libro gratuito, para saber cu谩l es el libro (en caso de no estar registrados al newsletter) debemos acceder a 茅ste enlace y en el sitio veremos los libros gratuitos de d铆as anteriores as铆 como el libro gratuito del d铆a. Para no revisar el sitio cada d铆a vamos a construir una funci贸n que nos notifique cada d铆a que libro gratuito ofrece la editorial Packtpub. La notificaci贸n la vamos a realizar por medio de un mail, ya que todos los d铆as la mayor铆a de nosotros revisa el correo.

Dentro de las regiones vamos a seleccionar la que m谩s nos convenga seg煤n nuestros requerimientos. Eleg铆 Brasil s贸lo para salir de las regiones de US (no me interesa la latencia).

Scheduler

Vamos a seleccionar Create + get started para situarnos en la siguiente pantalla:

Azure Functions

En donde nos aparecen algunas opciones preestablecidas para crear nuestra funci贸n. Como nosotros vamos a trabajar con PowerShell seleccionamos Our create your own custom function.

Vamos a seleccionar PowerShell como lenguaje y el template del tipo TimeTrigger. Antes de finalizar el asistente definiremos el nombre de la funci贸n:

Azure Functions

Por 煤ltimo debemos seleccionar la periodicidad en la que se va a ejecutar nuestra funci贸n. Azure Functions utiliza expresiones CRON para planificar la ejecuci贸n de nuestra funci贸n. No pretendo profundizar sobre como funciona pero b谩sicamente debemos tener clara la estructura que es la siguiente:

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

Para el ejemplo, vamos a requerir que la ejecuci贸n se realice una vez por d铆a, a las 10:00hs (UTC-03:00):

0 0 13 * * *

Ingresamos la estructura anterior y seleccionamos create:

Schedule

C贸digo

Ahora nos toca desarrollar la parte de c贸digo, vamos a utilizar el cmdlet Invoke-WebRequest con el que obtendremos el dato que necesitamos para enviar al mail. Destacar que el comando solamente puede ejecutarse con el par谩metro -UseBasicParsing por lo que es necesario manipular los datos de forma m谩s extensa, de la siguiente manera:

#Datos
$web = Invoke-WebRequest -Uri https://www.packtpub.com/packt/offers/free-learning -UseBasicParsing
$texto = ($web.RawContent -split '<div class="dotd-title">' | select -Last 1)
$title = (($texto -split '</h2>' | select -First 1) -split '<h2>' | select -Last 1).trim()
#Credenciales
$user = '[email protected]'
$pass = (ConvertTo-SecureString 'XXXXXXXXXXXXXX' -AsPlainText -Force)
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $pass
#Env铆o de mail 
$date = Get-Date -Format dd/MM
Send-MailMessage -To vmsilvamolina@gmail.com -From vmsilvamolina@victorsilva.com.uy -Subject "Packtpub: Libro gratis - $date" -Body $title -SmtpServer smtp.office365.com -UseSsl -Credential $cred -Port 587

Azure Functions - C贸digo

Ya con el c贸digo ingresado, vamos a guardar los cambios y posteriormente a que se ejecute, para poder obtener como resultado nuestro mail con la informaci贸n del libro sin necesidad de acceder a la p谩gina, utilizando una funci贸n simple en Azure.

Happy scripting!

Comments