Claude Code × Amazon Bedrock Guide Complet | Déployer Claude en Production sur AWS
Guide complet pour utiliser Amazon Bedrock avec Claude Code. De l'authentification IAM, le streaming, l'intégration Lambda, l'implémentation RAG jusqu'à l'optimisation des coûts — basé sur l'expérience de production réelle de Masa.
« Je veux utiliser l’API Claude en production, mais la gestion des clés API me préoccupe » ou « Notre politique de sécurité interne interdit que les données quittent AWS » — pour ces problèmes, Amazon Bedrock est la solution idéale.
Lorsque j’intégrais de l’IA dans un serveur API sur ECS pour un projet professionnel, j’utilisais initialement l’API Anthropic directement. Mais un audit de sécurité a identifié la « gestion des clés API pour les services externes » comme un problème. Après la migration vers Bedrock, l’authentification est entièrement gérée via des rôles IAM — fini la gestion des clés API. Cet article couvre tout, de l’implémentation de Bedrock avec Claude Code jusqu’à l’exploitation en production.
Qu’est-ce qu’Amazon Bedrock ?
Amazon Bedrock est un service de modèles d’IA managé d’AWS. Il permet d’appeler plusieurs modèles — Claude (Anthropic), Llama (Meta), Titan (Amazon) — via une API unifiée.
Pourquoi utiliser Bedrock ?
| Aspect | API Anthropic | Amazon Bedrock |
|---|---|---|
| Authentification | Clé API | Rôle IAM AWS |
| Facturation | Directement chez Anthropic | Intégrée à la facturation AWS |
| Support VPC | Aucun | Entièrement privé avec PrivateLink |
| Conservation des données | Politique d’Anthropic | Politique d’AWS |
| Conformité | SOC2, etc. | SOC2 / ISO27001 / HIPAA, etc. |
L’API Anthropic est pratique pour les projets personnels, mais pour les cas d’usage entreprise, finance et santé, Bedrock devient de plus en plus le seul choix.
Étape 1 : Configuration initiale
Demander l’accès au modèle
D’abord, demandez l’accès aux modèles Claude dans la console AWS.
# Obtenir la liste des modèles disponibles
aws bedrock list-foundation-models \
--by-provider anthropic \
--region us-east-1 \
--query 'modelSummaries[].{id:modelId, name:modelName}'
# Exemple de sortie
[
{"id": "anthropic.claude-opus-4-5", "name": "Claude Opus 4.5"},
{"id": "anthropic.claude-sonnet-4-6", "name": "Claude Sonnet 4.6"},
{"id": "anthropic.claude-haiku-4-5-20251001", "name": "Claude Haiku 4.5"}
]
Important : Les régions principales disponibles sont us-east-1 (Virginie) et us-west-2 (Oregon). La région Tokyo peut être utilisée via la Cross-region inference.
Installation du SDK
npm install @anthropic-ai/sdk @aws-sdk/client-bedrock-runtime
Étape 2 : Implémentation de base
Utiliser le support Bedrock intégré du SDK Anthropic (Recommandé)
Le SDK officiel Anthropic dispose d’un support Bedrock intégré. Comme la syntaxe est presque identique à l’API Anthropic ordinaire, le coût de migration depuis le code existant est minimal.
// src/lib/bedrock-client.ts
import Anthropic from "@anthropic-ai/sdk";
// Pas de credentials nécessaires quand le rôle IAM est utilisé (ex. Lambda/ECS)
const bedrock = new Anthropic.AnthropicBedrock({
awsRegion: process.env.AWS_REGION ?? "us-east-1",
// Le profil AWS CLI est utilisé automatiquement en développement local
});
export async function generateText(
prompt: string,
options: { model?: string; maxTokens?: number } = {}
): Promise<string> {
const { model = "anthropic.claude-sonnet-4-6", maxTokens = 1024 } = options;
const response = await bedrock.messages.create({
model,
max_tokens: maxTokens,
messages: [{ role: "user", content: prompt }],
});
return response.content[0].type === "text" ? response.content[0].text : "";
}
Les IDs de modèle Bedrock diffèrent de l’API Anthropic :
API Anthropic: claude-sonnet-4-6
Bedrock: anthropic.claude-sonnet-4-6 (préfixe ajouté)
Support du streaming
Le streaming est indispensable pour les longues réponses.
// src/lib/bedrock-stream.ts
export async function* streamText(
prompt: string,
model = "anthropic.claude-sonnet-4-6"
): AsyncGenerator<string> {
const stream = await bedrock.messages.stream({
model,
max_tokens: 4096,
messages: [{ role: "user", content: prompt }],
});
for await (const chunk of stream) {
if (
chunk.type === "content_block_delta" &&
chunk.delta.type === "text_delta"
) {
yield chunk.delta.text;
}
}
}
// Exemple d'utilisation (Next.js App Router)
export async function POST(req: Request) {
const { prompt } = await req.json();
const encoder = new TextEncoder();
const stream = new ReadableStream({
async start(controller) {
for await (const text of streamText(prompt)) {
controller.enqueue(encoder.encode(text));
}
controller.close();
},
});
return new Response(stream, {
headers: { "Content-Type": "text/event-stream" },
});
}
Étape 3 : Schéma Lambda + Bedrock
L’architecture la plus courante pour fournir des fonctionnalités d’IA sans serveur.
claude -p "
Implémente la fonction Lambda suivante dans src/lambda/ai-handler.ts :
- Recevoir prompt et maxTokens depuis l'événement
- Appeler Bedrock (claude-sonnet-4-6) et retourner le résultat
- Gérer les erreurs : ThrottlingException (retry) et ValidationException (400)
- Enregistrer le temps d'exécution
- Initialiser le client en dehors du handler (optimisation du cold start)
"
// src/lambda/ai-handler.ts
import { Handler, APIGatewayProxyEvent, APIGatewayProxyResult } from "aws-lambda";
import Anthropic from "@anthropic-ai/sdk";
// Initialisation au scope du module (mis en cache lors de la réutilisation du conteneur)
const bedrock = new Anthropic.AnthropicBedrock({
awsRegion: process.env.AWS_REGION,
});
export const handler: Handler<APIGatewayProxyEvent, APIGatewayProxyResult> = async (event) => {
const startTime = Date.now();
try {
const { prompt, maxTokens = 512 } = JSON.parse(event.body ?? "{}");
if (!prompt) {
return { statusCode: 400, body: JSON.stringify({ error: "prompt is required" }) };
}
const response = await bedrock.messages.create({
model: "anthropic.claude-sonnet-4-6",
max_tokens: maxTokens,
messages: [{ role: "user", content: prompt }],
});
const duration = Date.now() - startTime;
console.log(JSON.stringify({
level: "INFO",
duration_ms: duration,
input_tokens: response.usage.input_tokens,
output_tokens: response.usage.output_tokens,
}));
return {
statusCode: 200,
body: JSON.stringify({
text: response.content[0].type === "text" ? response.content[0].text : "",
usage: response.usage,
}),
};
} catch (error: any) {
if (error.name === "ThrottlingException") {
console.warn("Rate limited by Bedrock, client should retry");
return { statusCode: 429, body: JSON.stringify({ error: "Rate limited, please retry" }) };
}
console.error("Bedrock error:", error);
return { statusCode: 500, body: JSON.stringify({ error: "AI generation failed" }) };
}
};
Politique IAM Lambda
// Configuration IAM avec CDK
import * as iam from "aws-cdk-lib/aws-iam";
lambdaFunction.addToRolePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
],
resources: [
`arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-sonnet-4-6`,
`arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-haiku-4-5-20251001`,
],
}));
Étape 4 : Implémentation RAG (Retrieval-Augmented Generation)
Un schéma où Claude lit des documents internes ou des informations produit pour répondre aux questions.
claude -p "
Implémente un système RAG avec Bedrock Knowledge Base.
Architecture :
- Stocker les documents dans S3
- Indexation vectorielle avec Bedrock Knowledge Base
- Récupérer des documents basés sur les questions de l'utilisateur
- Générer des réponses avec Claude Sonnet
Implémenter avec TypeScript + AWS SDK v3.
Obtenir l'ID de Knowledge Base depuis la variable d'environnement KNOWLEDGE_BASE_ID.
"
// src/lib/rag.ts
import {
BedrockAgentRuntimeClient,
RetrieveAndGenerateCommand,
} from "@aws-sdk/client-bedrock-agent-runtime";
const agentClient = new BedrockAgentRuntimeClient({ region: "us-east-1" });
export async function ragQuery(question: string): Promise<{
answer: string;
citations: string[];
}> {
const response = await agentClient.send(
new RetrieveAndGenerateCommand({
input: { text: question },
retrieveAndGenerateConfiguration: {
type: "KNOWLEDGE_BASE",
knowledgeBaseConfiguration: {
knowledgeBaseId: process.env.KNOWLEDGE_BASE_ID!,
modelArn: `arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-sonnet-4-6`,
retrievalConfiguration: {
vectorSearchConfiguration: { numberOfResults: 5 },
},
},
},
})
);
const answer = response.output?.text ?? "";
const citations = (response.citations ?? [])
.flatMap((c) => c.retrievedReferences ?? [])
.map((r) => r.location?.s3Location?.uri ?? "")
.filter(Boolean);
return { answer, citations };
}
Étape 5 : Optimisation des coûts
// Utilitaire de sélection de modèle
type TaskType = "classify" | "extract" | "summarize" | "generate" | "complex";
const MODEL_MAP: Record<TaskType, string> = {
classify: "anthropic.claude-haiku-4-5-20251001", // $0,80/1M tokens d'entrée
extract: "anthropic.claude-haiku-4-5-20251001",
summarize: "anthropic.claude-sonnet-4-6", // $3,00/1M tokens d'entrée
generate: "anthropic.claude-sonnet-4-6",
complex: "anthropic.claude-opus-4-5", // $15,00/1M tokens d'entrée
};
export function selectModel(task: TaskType): string {
return MODEL_MAP[task];
}
Réduire les coûts d’entrée avec la mise en cache des prompts
// La mise en cache des prompts est également disponible dans Bedrock
const response = await bedrock.messages.create({
model: "anthropic.claude-sonnet-4-6",
max_tokens: 1024,
system: [
{
type: "text",
text: longSystemPrompt,
cache_control: { type: "ephemeral" }, // Cache pendant 5 minutes
},
],
messages: [{ role: "user", content: userQuery }],
});
5 pièges courants
1. La région n’est pas supportée
Claude sur Bedrock n’est pas disponible dans toutes les régions. En 2026, us-east-1 et us-west-2 sont les régions principales. Pour l’utiliser depuis Tokyo, activez la Cross-region inference.
// Utiliser l'ARN de modèle pour la Cross-region inference
const crossRegionModelArn =
"arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-sonnet-4-6";
2. Oublier de demander l’accès au modèle
Dans Bedrock, vous devez demander un « Model access » pour chaque modèle que vous souhaitez utiliser. Appeler un modèle sans demande d’accès entraîne une AccessDeniedException. Faites toujours la demande avant de commencer à coder avec Claude Code.
3. Timeout Lambda trop court
Les réponses de Claude peuvent prendre 10 à 30 secondes. La valeur par défaut de Lambda de 3 secondes causera certainement un timeout. Configurez-le à au moins 30 secondes, et de 60 à 300 secondes pour les générations longues.
4. Confondre les IDs de modèle Bedrock avec les IDs de l’API Anthropic
❌ Utiliser directement l'ID de l'API Anthropic : "claude-sonnet-4-6"
✅ ID Bedrock : "anthropic.claude-sonnet-4-6"
5. Ne pas tenir compte de la latence de Cross-region inference
Appeler des modèles dans us-east-1 depuis Tokyo ajoute une latence aller-retour d’environ 100 à 200 ms. Pour les applications sensibles à la latence, utilisez le streaming pour réduire le délai perçu.
Récapitulatif
| Tâche | Contribution de Claude Code |
|---|---|
| Implémentation de base | Génère le client AnthropicBedrock et les fonctions |
| Intégration Lambda | Génère le handler et la politique IAM ensemble |
| Implémentation RAG | Génère automatiquement le code d’intégration Knowledge Base |
| Optimisation des coûts | Conçoit la logique de sélection de modèle par type de tâche |
| Résolution de problèmes | Identifie la cause et suggère une solution depuis les logs d’erreur |
Développer avec Claude Code, opérer en production sur Bedrock — cette combinaison satisfait toutes les exigences de sécurité, coût et évolutivité. Commencez par l’essai gratuit de Bedrock et, lorsque vous êtes prêt pour la production, il suffit de configurer le rôle IAM.
Articles connexes
- Guide Complet Claude Code × AWS Lambda
- Guide Complet Claude Code × AWS IAM
- Guide Complet pour Réduire les Coûts d’API de Claude Code de 90%
Références
Passez votre flux Claude Code au niveau supérieur
50 modèles de prompts éprouvés, prêts à être copiés-collés dans Claude Code.
PDF gratuit : aide-mémoire Claude Code en 5 minutes
Laissez simplement votre e-mail et nous vous enverrons immédiatement l'aide-mémoire A4 en PDF.
Nous traitons vos données avec soin et n'envoyons jamais de spam.
À propos de l'auteur
Masa
Ingénieur passionné par Claude Code. Il gère claudecode-lab.com, un média tech en 10 langues avec plus de 2 000 pages.
Articles similaires
Claude Code × AWS CodePipeline/CodeBuild Guide Complet | Construire automatiquement des pipelines CI/CD
Construisez automatiquement CI/CD avec AWS CodePipeline & CodeBuild en utilisant Claude Code. Exemples concrets pour la conception de pipelines, génération de buildspec.yml, automatisation des tests et infrastructure CDK.
Claude Code × AWS CloudWatch Guide Complet | Analyse de Logs, Alarmes et Dashboards Automatiques
Optimisez AWS CloudWatch avec Claude Code. Code pratique pour l'analyse de patterns de logs, la configuration automatique d'alarmes, les dashboards de métriques et l'investigation d'incidents.
Claude Code × AWS ECS/Fargate Guide Complet | Automatiser les Déploiements de Conteneurs
Automatisez les déploiements AWS ECS/Fargate avec Claude Code. Des définitions de tâches à la configuration des services, en passant par les déploiements Blue/Green et l'infrastructure CDK — basé sur l'expérience terrain de Masa.