Blob + Event Grid en Azure: procesamiento event-driven
Blob + Event Grid en Azure permite procesar automáticamente archivos tan pronto como se suben a Azure Blob Storage. Esta conexión es útil para escenarios event-driven, como transformación de archivos, indexación o notificaciones en tiempo real.
Requisitos previos
- Cuenta Azure con permisos para crear recursos (Resource Group, Storage Account, Function App).
- Azure CLI instalada y autenticada (az login).
- zip (u otra forma de empaquetar archivos) y Node.js local para crear la función (ejemplo en JavaScript).
Paso 1: Crear Resource Group y Storage Account
Crear un Resource Group, una Storage Account y un contenedor donde vas a subir los archivos. Sustituye <storageaccountname> por un nombre único todo en minúsculas.
RESOURCE_GROUP="rg-eventgrid-demo"
LOCATION="northeurope"
STORAGE_ACCOUNT="<storageaccountname>" # nombre único, minúsculas
az group create -n $RESOURCE_GROUP -l $LOCATION
az storage account create -n $STORAGE_ACCOUNT -g $RESOURCE_GROUP --sku Standard_LRS --kind StorageV2
az storage container create -n uploads --account-name $STORAGE_ACCOUNT
Paso 2: Crear un Azure Function App (Node.js)
Crear un Function App en Consumption Plan que contendrá la función con binding Event Grid. Usa un nombre único para el Function App.
FUNCTION_APP="funevdemo"
az functionapp create -g $RESOURCE_GROUP -n $FUNCTION_APP \
--storage-account $STORAGE_ACCOUNT --runtime node --functions-version 4 \
--consumption-plan-location $LOCATION
Paso 3: Crear y desplegar la función con Event Grid trigger
Crear una función simple que recibe eventos del Event Grid. Estructura mínima local:
BlobEventListener/
index.js
function.json
index.js:
module.exports = async function (context, eventGridEvent) {
context.log('EventGrid event received:', JSON.stringify(eventGridEvent));
const data = eventGridEvent.data || {};
context.log('Blob URL:', data.url || data.blobUrl || data.url);
};
function.json:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
}
]
}
Empaquetar y desplegar:
zip -r function.zip BlobEventListener
az functionapp deployment source config-zip -g $RESOURCE_GROUP -n $FUNCTION_APP --src function.zip
Paso 4: Crear la suscripción de Event Grid del Storage para la Function
Crear una suscripción que envía eventos de tipo Microsoft.Storage.BlobCreated a la Function. Obtén el id de la Storage Account y el id de la Function (endpoint).
STORAGE_ID=$(az storage account show -n $STORAGE_ACCOUNT -g $RESOURCE_GROUP --query id -o tsv)
SUB_ID=$(az account show --query id -o tsv)
FUNCTION_ENDPOINT="/subscriptions/$SUB_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Web/sites/$FUNCTION_APP/functions/BlobEventListener"
az eventgrid event-subscription create \
--name BlobCreateToFunction \
--source-resource-id $STORAGE_ID \
--endpoint-type azurefunction \
--endpoint "$FUNCTION_ENDPOINT" \
--included-event-types Microsoft.Storage.BlobCreated
Nota: la plataforma valida automáticamente el endpoint. Si recibes error de validación, confirma que la función está desplegada y que el nombre de la función (BlobEventListener) coincide.
Paso 5: Probar — subir un archivo y ver logs
Sube un archivo al contenedor y observa los logs de la Function en tiempo real.
echo "teste" > test.txt
az storage blob upload --account-name $STORAGE_ACCOUNT -c uploads -n test.txt --file ./test.txt
# Ver logs de la Function (en un terminal separado)
az functionapp log tail -g $RESOURCE_GROUP -n $FUNCTION_APP
Deberías ver una línea con "EventGrid event received" y la URL del blob. Si no aparece, verifica la suscripción con az eventgrid event-subscription show.
Verificar el resultado
Confirmar que el flujo está funcionando:
- La subida del archivo (az storage blob upload) desencadena un evento Microsoft.Storage.BlobCreated.
- La Azure Function registra el evento (ver az functionapp log tail) y muestra la URL del blob.
- Si es necesario, verifica la suscripción con az eventgrid event-subscription list --source-resource-id $STORAGE_ID.
Conclusión
Conectando Azure Blob Storage a una Azure Function vía Event Grid se creó un pipeline event-driven simple y útil para procesamiento automático de archivos. Próximos pasos: leer el blob dentro de la función (usar @azure/storage-blob), filtrar eventos por prefix/suffix en la suscripción y añadir retries/Dead Letter. Consejo: si la validación del endpoint falla, confirma que la función responde y que la ruta/nombre de la función están correctos — ¿quieres probar a filtrar por extensión (.csv) antes de procesar?