Este projeto implementa uma API REST para gerenciar alunos, cursos e matrículas em uma instituição de ensino. Utiliza FastAPI como framework principal, com deploy automatizado via GitHub Actions para o Google Cloud Run, e armazenamento de imagens no Artifact Registry.
- FastAPI — Framework moderno para APIs com Python
- Uvicorn — Servidor ASGI de alto desempenho
- Google Cloud Run — Plataforma gerenciada para containers
- Artifact Registry — Armazenamento de imagens Docker
- GitHub Actions — Pipeline de CI/CD automatizado
- Cloud Build — Para build de imagens Docker
.
├── app.py # Arquivo principal FastAPI
├── routers/
│ ├── alunos.py
│ ├── cursos.py
│ └── matriculas.py
├── database.py # Configuração do banco de dados
├── requirements.txt
├── Dockerfile
└── .github/
└── workflows/
└── deploy.yml # Pipeline CI/CD
Após o deploy, acesse:
GET /→ Mensagem de status da APIGET /docs→ Documentação interativa SwaggerGET /redoc→ Documentação Redoc
Rotas adicionais:
/alunos— CRUD de alunos/cursos— CRUD de cursos/matriculas— CRUD de matrículas
O deploy ocorre automaticamente ao realizar um push na branch main.
- Autentica no Google Cloud usando uma chave secreta (JSON)
- Constrói a imagem Docker e envia ao Artifact Registry
- Faz o deploy no Cloud Run com
--allow-unauthenticated - Garante acesso público com
add-iam-policy-binding
🔐 A chave JSON está armazenada no GitHub Secrets como
GCLOUD_SERVICE_KEY.
Antes de realizar o commit que dispara o pipeline, é necessário:
-
Criar projeto via Console
-
Atribuir papéis ao usuário, como:
- Administrador da organização
- Editor ou Administrador de Projeto
- Administrador do Cloud Run (
roles/run.admin)
-
Criar chave JSON de uma conta de serviço
-
Adicionar a chave no GitHub Secrets como
GCLOUD_SERVICE_KEY
gcloud services enable cloudbuild.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable artifactregistry.googleapis.comApós essas configurações, basta fazer um git commit com alteração no projeto para disparar o pipeline e concluir o deploy.
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8080"]gcloud artifacts repositories create api-docker \
--repository-format=docker \
--location=us-central1 \
--description="Repositório Docker para API"gcloud run services add-iam-policy-binding api-devops \
--member="allUsers" \
--role="roles/run.invoker" \
--region=us-central1 \
--platform=managed- Causa: A conta de serviço usada no CI/CD não tinha o papel
roles/run.admin - Solução: Atribuir
Cloud Run Adminà conta de serviço no IAM
- Causa: A política IAM do serviço exigia autenticação
- Solução: Garantir o uso de
--allow-unauthenticatede adicionar binding IAM comroles/run.invoker
- Causa: APIs gcloud services enable cloudbuild.googleapis.com não habilitadas
- Solução: ativar APIs e monitorar logs pelo console do Cloud Build
feat: adiciona rota '/' para exibir status da APIchore(ci): permite acesso público via IAM no Cloud Runfix: corrige permissão da conta de serviço no deployci: adiciona etapa de deploy no Cloud Run via GitHub Actions
✅ API publicada com sucesso no Google Cloud Run ✅ Deploy automatizado com CI/CD ✅ Requisições públicas liberadas com sucesso ✅ Pronto para produção, integração com banco e escalabilidade
Projeto desenvolvido por Ronayrton durante experimentos com CI/CD na GCP usando GitHub Actions, FastAPI e Cloud Run.