Full Stack AI AWS Bedrock en pratique : le code et les commandes qui comptent vraiment
Full Stack AI AWS Bedrock : l'essentiel en un article — vrai code, schémas et étapes concrètes, extraits d'un cours de 41 leçons.
Pas de théorie interminable ici : on ouvre le terminal et on pratique. Voici l'essentiel de Full Stack AI AWS Bedrock, extrait directement d'un cours complet de 41 leçons — avec du vrai code que tu peux copier-coller maintenant.
- Creer un compte AWS et decouvrir Bedrock
- Introduction a l'IA generative et AWS Bedrock
- API Bedrock et SDK Python Boto3
- Prompt Engineering pour Bedrock
- Backend FastAPI avec Bedrock
Installer Boto3 et configurer les credentials
Objectifs pédagogiques
Qu'est-ce que Boto3 ?
Boto3 est le SDK officiel d'Amazon Web Services pour Python. Il permet d'interagir avec tous les services AWS (S3, DynamoDB, Lambda, Bedrock, etc.) directement depuis du code Python.
Boto3 – Client bas niveau
Accès direct aux API AWS. Chaque méthode correspond exactement à une opération de l'API REST. Vous manipulez des dictionnaires Python.
Boto3 – Resource haut niveau
Abstraction orientée objet. Plus intuitive pour certains services (S3, DynamoDB). Pour Bedrock, on utilise principalement le client.
Étape 1 – Installer Python 3.8+
Boto3 nécessite Python 3.8 ou supérieur. Vérifiez d'abord si Python est déjà installé :
python --version
Si la version affichée est 3.8+, passez à l'étape suivante. Sinon, installez Python selon votre système :
Windows
Téléchargez l'installateur officiel depuis https://www.python.org/downloads/. Cochez impérativement la case « Add Python to PATH » pendant l'installation.
# Vérification après installation python --version pip --version
macOS
# Via Homebrew (recommandé) brew install python@3.11 # Vérification python3 --version pip3 --version
Linux (Ubuntu / Debian)
sudo apt update sudo apt install python3 python3-pip python3-venv -y # Vérification python3 --version pip3 --version
python3 et pip3 au lieu de python et pip, car python peut pointer vers Python 2.x sur certains systèmes.Étape 2 – Créer un environnement virtuel
Un environnement virtuel isole les dépendances de votre projet. Cela évite les conflits entre différents projets Python sur votre machine.
Créer et activer le venv
Premier appel à Bedrock via la console
Objectifs pédagogiques
1 – Accéder à Amazon Bedrock
Étape 1 : Se connecter à la console AWS
Ouvrez votre navigateur et rendez-vous sur :
https://console.aws.amazon.com
Connectez-vous avec vos identifiants AWS. Si vous n'avez pas encore de compte, créez-en un (le Free Tier AWS vous donne accès à de nombreux services gratuitement).
Étape 2 : Choisir la bonne région
Vérifiez la région en haut à droite de la console :
+----------------------------------------------------------+ | AWS Console [N. Virginia v] | | ^^^^^^^^^^^^ | | Barre de recherche : [ Amazon Bedrock ] | | | +----------------------------------------------------------+ Si vous voyez une autre région, cliquez sur le menu déroulant et sélectionnez « US East (N. Virginia) ».
Étape 3 : Trouver Amazon Bedrock
Dans la barre de recherche en haut de la console, tapez « Bedrock » et cliquez sur Amazon Bedrock dans les résultats :
+----------------------------------------------------------+ | Recherche : [ Bedrock ] | | | | Résultats : | | +------------------------------------------------------+| | | Amazon Bedrock || | | Build with foundation models || | +------------------------------------------------------+| +----------------------------------------------------------+
Vous arrivez sur le tableau de bord Bedrock (Bedrock Dashboard).
2 – Activer l'accès aux modèles
Par défaut, aucun modèle n'est activé. Vous devez explicitement demander l'accès avant de pouvoir les utiliser.
Étape 1 : Aller dans Model Access
Dans le menu latéral gauche de Bedrock, cliquez sur « Model access » (tout en bas) :
+----------------------------+------------------------------+ | Amazon Bedrock | | | | Bedrock Dashboard | | Playgrounds | | | Chat | Bienvenue sur Amazon | | Text | Bedrock. Accédez à des | | Image | modèles fondation de | | | pointe via une API unique. | | Orchestration | | | Agents | | | Knowledge bases | | | | | | Foundation models | | | Base models | | | Custom models | | | | | | Bedrock configurations | | | > Model access <-- | | +----------------------------+------------------------------+
Étape 2 : Demander l'accès
Cliquez sur le bouton « Manage model access » (en haut à droite).
Vous verrez la liste de tous les modèles disponibles. Cochez les modèles suivants pour ce cours :
+----------------------------------------------------------+ | Manage model access | | | | Provider Model Access Status | | -------------------------------------------------------+| | [x] Anthropic Claude 3 Haiku Available || | [x] Anthropic Claude 3.5 Sonnet Available || | [ ] Anthropic Claude 3 Opus Available || | [x] Amazon Titan Text Express Available || | [x] Meta Llama 3 8B Instruct Available || | [x] Mistral AI Mistral 7B Instruct Available || | [x] Mistral AI Mixtral 8x7B Instruct Available || | | | [ Save changes ] | +----------------------------------------------------------+
Cliquez sur « Save changes ». L'accès est généralement activé en quelques secondes.
Créer une API FastAPI + Bedrock
Full Stack AI avec AWS Bedrock • Backend FastAPI avec Bedrock
/chat fonctionnel testable via Swagger UI, curl et PowerShell.Ce que vous allez apprendre
1. Installation des dépendances
Assurez-vous que votre environnement virtuel est activé, puis installez les bibliothèques :
# Activer l'environnement virtuel (Windows PowerShell) .\venv\Scripts\Activate.ps1 # Installer les bibliothèques principales pip install fastapi uvicorn boto3 pydantic python-dotenv python-multipart
Vérifiez que tout est installé correctement :
pip list | findstr -i "fastapi uvicorn boto3"
Vous devriez voir les trois bibliothèques avec leurs numéros de version.
2. Les modèles Pydantic
Pydantic permet de définir la forme exacte des données que notre API accepte et retourne. C'est comme un formulaire avec des champs obligatoires : si les données ne correspondent pas, l'API refuse automatiquement la requête avec un message d'erreur clair.
# backend/models/schemas.py
from pydantic import BaseModel, Field
from typing import Optional, List
class Message(BaseModel):
"""Représente un message dans la conversation."""
role: str = Field(
...,
description="Rôle : 'user' ou 'assistant'",
examples=["user"]
)
content: str = Field(
...,
description="Contenu du message",
examples=["Explique-moi les boucles Python"]
)
class ChatRequest(BaseModel):
"""Requête envoyée par le frontend pour chatter avec l'IA."""
message: str = Field(
...,
min_length=1,
max_length=10000,
description="Message de l'utilisateur"
)
history: Optional[List[Message]] = Field(
default=[],
description="Historique de la conversation"
)
model_id: Optional[str] = Field(
default=None,
description="ID du modèle Bedrock"
)
temperature: Optional[float] = Field(
default=0.7,
ge=0.0,
le=1.0,
description="Créativité du modèle (0 = précis, 1 = créatif)"
)
max_tokens: Optional[int] = Field(
default=4096,
ge=1,
le=8192,
description="Nombre maximum de tokens dans la réponse"
)
class ChatResponse(BaseModel):
"""Réponse retournée par l'API après appel à Bedrock."""
response: str = Field(
...,
description="Réponse générée par l'IA"
)
model_id: str = Field(
...,
description="ID du modèle utilisé"
)
input_tokens: int = Field(
default=0,
description="Tokens consommés par le prompt"
)
output_tokens: int = Field(
default=0,
description="Tokens générés dans la réponse"
)
class HealthResponse(BaseModel):
"""Réponse du endpoint de santé."""
status: str
message: strSi le frontend envoie un champ temperature de valeur 5.0 (hors de la plage 0-1), Pydantic retourne :
{
"detail": [
{
"loc": ["body", "temperature"],
"msg": "Input should be less than or equal to 1",
"type": "less_than_equal"
}
]
}3. Le service Bedrock
Le service Bedrock encapsule toute la logique de communication avec AWS. C'est ici que la « magie » opère : votre message texte est transformé en requête AWS, envoyé à Claude, et la réponse est retournée.
# backend/services/bedrock_service.py
import json
import boto3
from config import AWS_REGION, BEDROCK_MODEL_ID, MAX_TOKENS, TEMPERATURE
def get_bedrock_client():
"""Crée et retourne un client Bedrock Runtime."""
return boto3.client(
service_name="bedrock-runtime",
region_name=AWS_REGION
)
def build_messages(message: str, history: list = None) -> list:
"""Construit la liste de messages pour l'API Bedrock."""
messages = []
if history:
for msg in history:
messages.append({
"role": msg.role,
"content": [{"type": "text", "text": msg.content}]
})
messages.append({
"role": "user",
"content": [{"type": "text", "text": message}]
})
return messages
def invoke_bedrock(
message: str,
history: list = None,
model_id: str = None,
temperature: float = None,
max_tokens: int = None
) -> dict:
"""
Appelle AWS Bedrock avec le message et retourne la réponse.
Args:
message: Le message de l'utilisateur
history: L'historique de la conversation
model_id: L'identifiant du modèle Bedrock
temperature: La créativité (0.0 à 1.0)
max_tokens: Le nombre max de tokens en sortie
Returns:
dict avec la réponse, le modèle utilisé et les tokens
"""
client = get_bedrock_client()
model = model_id or BEDROCK_MODEL_ID
temp = temperature if temperature is not None else TEMPERATURE
tokens = max_tokens or MAX_TOKENS
messages = build_messages(message, history)
body = json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": tokens,
"temperature": temp,
"messages": messages
})
response = client.invoke_model(
modelId=model,
contentType="application/json",
accept="application/json",
body=body
)
response_body = json.loads(response["body"].read())
return {
"response": response_body["content"][0]["text"],
"model_id": model,
"input_tokens": response_body.get("usage", {}).get(
"input_tokens", 0
),
"output_tokens": response_body.get("usage", {}).get(
"output_tokens", 0
),
}Détails du paramètre body
| Paramètre | Type | Description |
|---|---|---|
anthropic_version |
string | Version de l'API Anthropic utilisée par Bedrock |
max_tokens |
int | Limite la longueur de la réponse (1 token ≈ 0.75 mot) |
temperature |
float | 0.0 = réponses précises, 1.0 = réponses créatives |
messages |
list | La conversation complète (historique + nouveau message) |
4. Le fichier main.py complet
C'est le point d'entrée de l'application. Il assemble tous les composants : configuration, CORS, routes et gestion d'erreurs.
# backend/main.py
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from dotenv import load_dotenv
from config import CORS_ORIGINS
from models.schemas import (
ChatRequest,
ChatResponse,
HealthResponse,
)
from services.bedrock_service import invoke_bedrock
load_dotenv()
app = FastAPI(
title="Full Stack AI - Backend Bedrock",
description="API pour interagir avec AWS Bedrock (Claude)",
version="1.0.0",
)
# --- Middleware CORS ---
app.add_middleware(
CORSMiddleware,
allow_origins=CORS_ORIGINS,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# --- Endpoints ---
@app.get("/health", response_model=HealthResponse)
def health_check():
"""Vérifie que le serveur est opérationnel."""
return HealthResponse(
status="ok",
message="Le serveur fonctionne correctement"
)
@app.post("/chat", response_model=ChatResponse)
def chat(request: ChatRequest):
"""
Envoie un message à AWS Bedrock et retourne la réponse de l'IA.
- **message** : le texte envoyé par l'utilisateur
- **history** : l'historique de conversation (optionnel)
- **model_id** : le modèle Bedrock à utiliser (optionnel)
- **temperature** : la créativité de 0.0 à 1.0 (optionnel)
- **max_tokens** : nombre max de tokens en sortie (optionnel)
"""
try:
result = invoke_bedrock(
message=request.message,
history=request.history,
model_id=request.model_id,
temperature=request.temperature,
max_tokens=request.max_tokens,
)
return ChatResponse(**result)
except Exception as e:
raise HTTPException(
status_code=500,
detail=f"Erreur lors de l'appel à Bedrock : {str(e)}"
)
@app.get("/models")
def list_models():
"""Retourne la liste des modèles disponibles."""
return {
"models": [
{
"id": "anthropic.claude-3-sonnet-20240229-v1:0",
"name": "Claude 3 Sonnet",
"description": "Bon équilibre performance/coût"
},
{
"id": "anthropic.claude-3-haiku-20240307-v1:0",
"name": "Claude 3 Haiku",
"description": "Le plus rapide et économique"
},
{
"id": "anthropic.claude-3-5-sonnet-20240620-v1:0",
"name": "Claude 3.5 Sonnet",
"description": "Le plus performant"
},
]
}Cet article couvre les extraits les plus utiles — le cours complet Full Stack AI AWS Bedrock (12 chapitres, 41 leçons, exercices corrigés et projet final) t'emmène jusqu'au bout.
./acceder-au-cours-complet cours gratuit : Maîtriser Claude CodeFAQ
Combien de temps pour apprendre Full Stack AI AWS Bedrock ?
Faut-il des prérequis ?
Par où commencer concrètement ?
📬 Tu veux recevoir ce type de guide chaque semaine ? Abonne-toi gratuitement — code réel, zéro blabla.