Criando uma API OCR com FaaS na Azure – Parte 1: Arquitetura e Upload Seguro

Nos últimos tempos, tenho trabalhado em um sistema OCR voltado para leitura de receitas médicas digitais. O objetivo é simples: permitir que profissionais da saúde e farmácias possam automatizar a interpretação de prescrições médicas a partir de imagens enviadas via API. Tudo isso com segurança, escalabilidade e sem dor de cabeça com gestão de credenciais. Neste primeiro artigo da série, vou mostrar como pensei a arquitetura, a justificativa do uso de Azure Functions, e como fiz a integração com o Blob Storage usando Managed Identity. Ao final, teremos um endpoint funcional para upload seguro de imagens. Bora lá? Por que Azure Functions? A escolha por Azure Functions veio naturalmente por algumas razões: Serverless: não preciso me preocupar com infraestrutura. Escalável: o sistema vai lidar com muitos envios de imagem, então escalar sob demanda é essencial. Integrado com o ecossistema Azure: especialmente Blob Storage e Managed Identity. E como estamos falando de um sistema de OCR, onde a trigger principal será o envio de uma imagem para análise, uma Function HTTP cai como uma luva. Sobre a arquitetura do projeto Organizei a estrutura do código de forma limpa e modular, seguindo uma pegada de DDD light: /ocr-function-app ├── application/ │ └── UploadImageService.ts ├── domain/ │ └── IImageStorage.ts ├── infrastructure/ │ └── AzureBlobStorage.ts ├── functions/ │ └── HttpAddToBlob.ts ├── host.json ├── local.settings.json └── package.json A ideia é que a Function seja apenas o entrypoint, delegando responsabilidades para camadas mais específicas. ⛏️ Configurando o ambiente da Azure Function Antes de começar a codar, precisamos garantir que o ambiente da nossa Azure Function esteja pronto para subir e rodar corretamente com autenticação via Managed Identity e integração com o Blob Storage. Crie sua Azure Function no portal ou via CLI: func init ocr-function-app --worker-runtime node --language typescript Crie a Function HTTP trigger: func new --name HttpAddToBlob --template "HTTP trigger"

Apr 6, 2025 - 04:29
 0
Criando uma API OCR com FaaS na Azure – Parte 1: Arquitetura e Upload Seguro

Nos últimos tempos, tenho trabalhado em um sistema OCR voltado para leitura de receitas médicas digitais. O objetivo é simples: permitir que profissionais da saúde e farmácias possam automatizar a interpretação de prescrições médicas a partir de imagens enviadas via API. Tudo isso com segurança, escalabilidade e sem dor de cabeça com gestão de credenciais.

Neste primeiro artigo da série, vou mostrar como pensei a arquitetura, a justificativa do uso de Azure Functions, e como fiz a integração com o Blob Storage usando Managed Identity. Ao final, teremos um endpoint funcional para upload seguro de imagens. Bora lá?

Por que Azure Functions?

A escolha por Azure Functions veio naturalmente por algumas razões:

  • Serverless: não preciso me preocupar com infraestrutura.
  • Escalável: o sistema vai lidar com muitos envios de imagem, então escalar sob demanda é essencial.
  • Integrado com o ecossistema Azure: especialmente Blob Storage e Managed Identity.

E como estamos falando de um sistema de OCR, onde a trigger principal será o envio de uma imagem para análise, uma Function HTTP cai como uma luva.

Sobre a arquitetura do projeto

Organizei a estrutura do código de forma limpa e modular, seguindo uma pegada de DDD light:

/ocr-function-app
├── application/
│   └── UploadImageService.ts
├── domain/
│   └── IImageStorage.ts
├── infrastructure/
│   └── AzureBlobStorage.ts
├── functions/
│   └── HttpAddToBlob.ts
├── host.json
├── local.settings.json
└── package.json

A ideia é que a Function seja apenas o entrypoint, delegando responsabilidades para camadas mais específicas.

⛏️ Configurando o ambiente da Azure Function

Antes de começar a codar, precisamos garantir que o ambiente da nossa Azure Function esteja pronto para subir e rodar corretamente com autenticação via Managed Identity e integração com o Blob Storage.

  1. Crie sua Azure Function no portal ou via CLI:
func init ocr-function-app --worker-runtime node --language typescript
  1. Crie a Function HTTP trigger:
func new --name HttpAddToBlob --template "HTTP trigger"