(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Blob + Event Grid no Azure: processamento event-driven

João Barros 17 de July de 2026 4 min de leitura

Blob + Event Grid no Azure permite processar automaticamente ficheiros assim que são carregados no Azure Blob Storage. Esta ligação é útil para cenários event-driven, como transformação de ficheiros, indexação ou notificações em tempo real.

Pré-requisitos

  • Conta Azure com permissões para criar recursos (Resource Group, Storage Account, Function App).
  • Azure CLI instalada e autenticada (az login).
  • zip (ou outra forma de empacotar ficheiros) e Node.js local para criar a função (exemplo em JavaScript).

Passo 1: Criar Resource Group e Storage Account

Criar um Resource Group, uma Storage Account e um contentor onde vai carregar os ficheiros. Substitua <storageaccountname> por um nome único todo em minúsculas.

RESOURCE_GROUP="rg-eventgrid-demo"
LOCATION="northeurope"
STORAGE_ACCOUNT="<storageaccountname>"  # nome ú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

Passo 2: Criar um Azure Function App (Node.js)

Criar um Function App em Consumption Plan que irá conter a função com binding Event Grid. Use um nome único para o 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

Passo 3: Criar e fazer deploy da função com Event Grid trigger

Criar uma função simples que recebe eventos do Event Grid. Estrutura 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"
    }
  ]
}

Empacotar e fazer deploy:

zip -r function.zip BlobEventListener
az functionapp deployment source config-zip -g $RESOURCE_GROUP -n $FUNCTION_APP --src function.zip

Passo 4: Criar a Event Grid subscription do Storage para a Function

Criar uma subscrição que envia eventos de tipo Microsoft.Storage.BlobCreated para a Function. Obtenha o id da Storage Account e o id da 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: a plataforma valida automaticamente o endpoint. Se receber erro de validação, confirme que a função está implantada e o nome da função (BlobEventListener) corresponde.

Passo 5: Testar — carregar um ficheiro e ver logs

Carregue um ficheiro para o contentor e observe os logs da Function em tempo real.

echo "teste" > test.txt
az storage blob upload --account-name $STORAGE_ACCOUNT -c uploads -n test.txt --file ./test.txt

# Ver logs da Function (num terminal separado)
az functionapp log tail -g $RESOURCE_GROUP -n $FUNCTION_APP

Deve ver uma linha com "EventGrid event received" e o URL do blob. Se não aparecer, verifique a subscrição com az eventgrid event-subscription show.

Verificar o resultado

Confirmar que o fluxo está a funcionar:

  • O upload do ficheiro (az storage blob upload) desencadeia um evento Microsoft.Storage.BlobCreated.
  • A Azure Function regista o evento (ver az functionapp log tail) e mostra o URL do blob.
  • Se necessário, verifique a subscrição com az eventgrid event-subscription list --source-resource-id $STORAGE_ID.

Conclusão

Ligando o Azure Blob Storage a uma Azure Function via Event Grid criou-se um pipeline event-driven simples e útil para processamento automático de ficheiros. Próximos passos: ler o blob dentro da função (usar @azure/storage-blob), filtrar eventos por prefix/suffix na subscrição e adicionar retries/Dead Letter. Dica: se a validação do endpoint falhar, confirme que a função responde e que a rota/nome da função estão correctos — quer experimentar filtrar por extensão (.csv) antes de processar?