Course

Une API IA en production : FastAPI puis Cloud Run

Construire une API FastAPI qui résume et classe des tickets de support avec Gemini (validation, streaming SSE, délais), puis la déployer sur Cloud Run en service privé, sans clé, avec journaux structurés.

Intermediate 8 lessons 5h
Start the course
Progress 0% · 0/8

This content is not translated yet. Showing the original version.

Un prototype qui appelle Gemini dans un notebook n'est pas une API. Entre les deux, il y a tout ce qui fait qu'un service tient debout : des entrées validées, des délais maximum, des erreurs propres, une réponse en flux quand c'est long, aucune clé dans le code, un conteneur, un accès privé et des journaux qu'on peut interroger à 3 heures du matin.

Fil rouge : une API de tri de tickets de support. On lui envoie un ticket (sujet + texte), elle renvoie un résumé, une catégorie, une priorité et le sentiment du client ; une deuxième route renvoie un résumé au fil de l'eau (streaming). Le code complet est dans files/ et a été testé de bout en bout le 2026-10-15, en local puis sur Cloud Run.

Pour qui ?

  • Développeurs Python qui ont déjà appelé l'API Gemini (sinon : la formation « Premiers pas avec l'API Gemini » du parcours Débuter).
  • Vous connaissez les bases du HTTP (GET, POST, codes 200/400/500) et du JSON.
  • Aucune expérience de Docker ou de Cloud Run n'est nécessaire : tout est expliqué.

Ce que l'on construit

flowchart LR
  C["Client : outil de support, script"] -->|"HTTPS + jeton d'identité"| R["Cloud Run : lab-api-ia (privé)"]
  R -->|"POST /v1/tickets/analyze"| V["Validation Pydantic"]
  V --> G["Gemini sur Vertex AI"]
  R -->|"POST /v1/tickets/summarize-stream (SSE)"| G
  R --> L["Cloud Logging : journaux JSON"]
  SA["Compte de service dédié : rôle Vertex AI User"] -.-> R

Objectifs

À la fin, vous saurez :

  1. écrire un endpoint FastAPI dont l'entrée et la sortie sont validées et qui renvoie du JSON structuré produit par Gemini ;
  2. ajouter une route en Server-Sent Events, un délai maximum et une traduction propre des erreurs du modèle (429 → 503 + Retry-After) ;
  3. gérer les secrets (.env en local, Secret Manager en production) et savoir quand on n'en a plus besoin ;
  4. écrire un Dockerfile et construire l'image avec Cloud Build ;
  5. déployer sur Cloud Run en service privé, avec un compte de service dédié et Gemini via Vertex AI, puis l'appeler avec un jeton d'identité ;
  6. régler autoscaling, concurrence et délais, estimer latence et coûts, lire les journaux structurés, et tout supprimer à la fin.

Prérequis techniques

  • Python 3.10 ou plus récent, pip install -r files/requirements.txt (plus pytest et httpx pour les tests).
  • En local : une clé de l'API Gemini (Google AI Studio) dans un fichier .env.
  • Sur Google Cloud (modules 2 et 3) : un projet avec facturation, la CLI gcloud connectée, et le droit de créer un compte de service.

Programme

ModuleLeçonsDurée indicative
1. Concevoir l'endpointContrat d'API et validation ; streaming SSE, délais et erreurs1h30
2. Secrets et conteneurSecrets, .env, Secret Manager, Vertex AI sans clé ; le Dockerfile1h
3. Déployer et exploiterDéploiement privé avec compte de service ; autoscaling, latence, coûts ; journaux structurés1h45
4. Projet finalL'API tickets de bout en bout, testée, déployée, appelée, nettoyée45 min

En local ou sur Google Cloud ?

En localSur Google Cloud
ModèleAPI Gemini avec une clé (GOOGLE_API_KEY)Gemini sur Vertex AI, sans clé
Lancementuvicorn main:app --port 8080./deploy.sh (Cloud Build + Cloud Run)
Identitévotre cléle compte de service lab-api-ia
Coûtles appels au modèleles appels au modèle + Cloud Run (zéro au repos avec min-instances=0)
Leçons1 à 45 à 8

Le même code tourne dans les deux cas : seule la configuration (variables d'environnement) change.

Les fichiers du lab

FichierRôle
main.pyl'API : validation, Gemini, SSE, délais, erreurs, journaux JSON
test_main.py7 tests sans clé ni réseau (faux modèle)
Dockerfilel'image du service
deploy.sh, call.sh, cleanup.shdéployer, appeler avec un jeton, tout supprimer
.env.examplemodèle de configuration (valeurs factices)

Resources

Download all (.zip)

References