De cero a “¿quién es este artista?” con Azure Functions y Python 

A veces querés hacer algo simple pero útil: por ejemplo, escribir una pequeña API que reciba el nombre de un artista y te devuelva info básica desde una base de datos pública de música.

Podrías montar un servidor completo, instalar frameworks, configurar puertos, pensar en escalabilidad… o podés usar Azure Functions y dejar que Azure se encargue de casi todo por vos.

Puedes encontrar el codigo completo aca:
Azure Functions y dejar que Azure se encargue

En esta guía vamos a crear una función serverless en Azure que llama a la API de MusicBrainz y te devuelve, en JSON, algunos datos de los artistas que busques.

¿Qué es la API de MusicBrainz?

MusicBrainz es como una Wikipedia de la música: una base de datos abierta donde hay info de artistas, discos, canciones, etc.
La API de MusicBrainz es simplemente una forma de hablar con esa base de datos usando HTTP:

vos mandás una URL con un parámetro (por ejemplo, ?query=metallica)

la API te responde en JSON con una lista de artistas que coinciden con la búsqueda.

Nada raro: es la típica API REST, perfecta para practicar.

¿Y qué es eso de “serverless” en Azure Functions?

Cuando escuchás serverless, no significa que no haya servidores. Los hay, pero:

vos no los administrás (no configurás máquinas, ni IIS, ni Nginx).

sólo escribís funciones: pequeños pedazos de código que se ejecutan cuando pasa algo.

Azure se encarga de levantar instancias, escalar, apagar, etc.

En nuestro caso, ese “algo” es una llamada HTTP.
Cuando alguien entra a:

https://TU-FUNC-APP.azurewebsites.net/api/GetArtistInfo?artist=metallica


Azure toma esa petición, llama a tu función en Python, espera la respuesta y se la devuelve al usuario.

Function App vs Function: ¿cuál es 

Acá hay dos palabritas que confunden mucho al inicio:

Function App: pensalo como la caja o contenedor donde viven una o varias funciones.
Tiene configuración común (runtime, región, claves, etc).

Function: es el pedazo de código concreto que se ejecuta.
En nuestro ejemplo, la función se llama GetArtistInfo.

En resumen:

Una Function App puede tener muchas Functions adentro.
Nosotros vamos a usar una Function App con una sola Function para mantenerlo simple.

El flujo completo que vas a crear

Un usuario abre el navegador y pone:
…/api/GetArtistInfo?artist=Coldplay

Azure recibe ese request y llama a tu código Python.

Tu código toma el valor de artist de la URL.

Con ese valor llama a la API de MusicBrainz.

Recibe la respuesta, la limpia un poco y arma un JSON más simple.

Ese JSON vuelve al usuario como respuesta.

Todo esto sin que vos tengas que encender un servidor ni preocuparte por cuántas peticiones aguanta.

Preparando el proyecto local

La idea es que primero lo probés en tu máquina y después lo subás a Azure.

1. Iniciar sesión en Azure

En una terminal:

az login


Se abre el navegador, iniciás sesión y listo.

2. Crear el proyecto de Functions (modelo Python V2)

Elegís una carpeta y corrés:

mkdir MusicFunction
cd MusicFunction
func init . --worker-runtime python --model V2


Ese comando crea algo como:

MusicFunction/
  host.json
  local.settings.json
  requirements.txt
  function_app.py


Acá es donde entra lo interesante: en el modelo V2 todo vive en function_app.py.

3. Agregar dependencias

Abrí requirements.txt y dejalo con esto:

azure-functions
requests


Después instalás:

pip install -r requirements.txt


Con esto tu función ya va a poder:

hablar con Azure (azure-functions)

llamar a APIs externas (requests)