Vamos começar com uma API com FastAPI para realizar upload de vídeos a um bucket S3 e inserir um item na fila para processamento com o SQS.

Primeiramente, tentei realizar com Django, pois conseguiria de forma simples e fácil, um sistema de autenticação e salvar os dados em banco de dados, não consegui, então vamos simplificar e fazer funcionar!

O segundo perrengue foi em decidir como executar a API, tentei usar EC2, mas na documentação da LocalStack diz que não está disponível na versão community, então, vamos usar docker para rodar!

Criei um novo repositório, será um monorepo, com o sistema

aws-lane-detection

Dentro da pasta services/api, o código está disponível lá.

Foi criada 3 rotas, mas a rota interessante aqui é a /upload/

MétodoRotaDescrição
GET/Health check
GET/bucketsLista buckets do S3
POST/upload/Faz upload de vídeo e envia SQS

Abaixo, segue como executar, e por fim, o resultado!

Qualquer dúvida, podem entrar em contato =D, ficarei feliz em conversar!

Tecnologias

  • FastAPI
  • LocalStack (S3, SQS)
  • Docker & Docker Compose
  • boto3

Executando

1. Suba o LocalStack manualmente

docker network create localstack-net

docker run -d \
  --name localstack-main \
  --network localstack-net \
  -p 4566:4566 \
  -e SERVICES=s3,sqs \
  -e DEBUG=1 \
  localstack/localstack

2. Criar a queue e o bucket

Necessário possuir a cli do AWS instalada

pip install awscli
pip install awscli-local

Para cria manualmente:

awslocal s3 mb s3://lane-bucket
awslocal sqs create-queue --queue-name future-processing

Ou usando a página da LocalStack: https://app.localstack.cloud/inst/default/resources

Necessário criar conta, possuem opção free

  1. Para o S3:
  • Ao acessar a página, buscar por S3

LocalStack

  • Acessar create

create bucket

  • Verificar a região, preencher o nome e criar

Preencher infos bucket

  • Após criar, nesta página, conseguirá ver os arquivos que forem enviados.
  1. Para o SQS:
  • Buscar por SQS

Buscar SQS

  • Clicar em create

create SQS

  • Verificar a região, preencher o nome e criar

preencher SQS

3. Subir a api

Primeiramente, copiar o arquivo example.env para .env e preencher com os dados adequados.

docker-compose up --build

A API estará disponível em: http://localhost:8080

Sugestão: Usar http://localhost:8080/docs para acessar as routas via Swagger UI

MétodoRotaDescrição
GET/Health check
GET/bucketsLista buckets do S3
POST/upload/Faz upload de vídeo e envia SQS

Funcionou !!!

Ao subir o vídeo, eis o retorno em json

{
  "message": "cctv052x2004080516x01642.avi uploaded successfully.",
  "s3_url": "http://localstack-main:4566/lane-bucket/cctv052x2004080516x01642.avi"
}

bucket file

E eis a mensagem na queue

{"bucket": "lane-bucket", "filename": "cctv052x2004080516x01642.avi", "url": "http://localstack-main:4566/lane-bucket/cctv052x2004080516x01642.avi", "event": "UPLOAD_VIDEO"}

Message Queue