Skip to content
Learni
View all tutorials
Cloud & IA

Comment intégrer AWS Bedrock dans une app Node.js en 2026

18 minINTERMEDIATE

Introduction

AWS Bedrock permet d'accéder à des modèles de fondation comme Claude 3 ou Llama 3 sans gérer l'infrastructure. Ce tutoriel montre comment l'intégrer dans une application Node.js pour générer du texte et gérer les réponses en streaming. Vous apprendrez les bonnes pratiques de configuration, d'authentification et de gestion d'erreurs pour des déploiements en production.

Prérequis

  • Node.js 20+
  • Compte AWS avec accès à Bedrock
  • Connaissances de base en TypeScript
  • AWS CLI configuré

Installation des dépendances

terminal
npm init -y
npm install @aws-sdk/client-bedrock-runtime dotenv

Installe le SDK officiel AWS pour Bedrock et dotenv pour gérer les variables d'environnement de manière sécurisée.

Configuration du client Bedrock

src/bedrockClient.ts
import { BedrockRuntimeClient } from '@aws-sdk/client-bedrock-runtime';
import * as dotenv from 'dotenv';

dotenv.config();

export const bedrockClient = new BedrockRuntimeClient({
  region: process.env.AWS_REGION || 'us-east-1',
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
  },
});

Initialise le client Bedrock avec les credentials AWS. Utilisez des variables d'environnement pour éviter de hardcoder les clés.

Invocation simple du modèle

src/invokeModel.ts
import { InvokeModelCommand } from '@aws-sdk/client-bedrock-runtime';
import { bedrockClient } from './bedrockClient';

export async function invokeClaude(prompt: string) {
  const command = new InvokeModelCommand({
    modelId: 'anthropic.claude-3-sonnet-20240229-v1:0',
    contentType: 'application/json',
    accept: 'application/json',
    body: JSON.stringify({
      anthropic_version: 'bedrock-2023-05-31',
      max_tokens: 1000,
      messages: [{ role: 'user', content: prompt }],
    }),
  });
  const response = await bedrockClient.send(command);
  return JSON.parse(new TextDecoder().decode(response.body));
}

Envoie une requête à Claude 3 Sonnet. Le corps doit respecter le format spécifique du modèle anthropic.

Gestion du streaming

src/streamResponse.ts
import { InvokeModelWithResponseStreamCommand } from '@aws-sdk/client-bedrock-runtime';
import { bedrockClient } from './bedrockClient';

export async function streamClaude(prompt: string) {
  const command = new InvokeModelWithResponseStreamCommand({
    modelId: 'anthropic.claude-3-sonnet-20240229-v1:0',
    contentType: 'application/json',
    body: JSON.stringify({
      anthropic_version: 'bedrock-2023-05-31',
      max_tokens: 1000,
      messages: [{ role: 'user', content: prompt }],
    }),
  });
  const response = await bedrockClient.send(command);
  for await (const event of response.body!) {
    if (event.chunk) {
      const chunk = JSON.parse(new TextDecoder().decode(event.chunk.bytes));
      if (chunk.delta?.text) process.stdout.write(chunk.delta.text);
    }
  }
}

Utilise le streaming pour afficher les tokens au fur et à mesure, améliorant l'expérience utilisateur.

Gestion des erreurs

src/errorHandler.ts
import { BedrockRuntimeServiceException } from '@aws-sdk/client-bedrock-runtime';

export function handleBedrockError(error: unknown) {
  if (error instanceof BedrockRuntimeServiceException) {
    console.error(`Bedrock error: ${error.name} - ${error.message}`);
    if (error.name === 'ValidationException') {
      throw new Error('Prompt invalide ou paramètres incorrects');
    }
  }
  throw error;
}

Capture les exceptions spécifiques de Bedrock pour fournir des messages d'erreur clairs et actionnables.

Bonnes pratiques

  • Toujours valider et sanitiser les prompts avant envoi
  • Utiliser des modèles via des alias pour faciliter les mises à jour
  • Implémenter un retry avec backoff exponentiel
  • Surveiller les coûts avec CloudWatch
  • Stocker les credentials via IAM roles plutôt que des clés statiques

Erreurs courantes à éviter

  • Oublier de demander l'accès au modèle dans la console Bedrock
  • Utiliser un format de body incorrect pour le modèle choisi
  • Ne pas gérer les limites de tokens et les timeouts
  • Ignorer les différences de régions pour certains modèles

Pour aller plus loin

Découvrez nos formations avancées sur l'IA générative et AWS : https://learni-group.com/formations