Skip to content
Learni
View all tutorials
Cloud Computing

Comment utiliser le Cloud Storage avec AWS S3 en 2026

Introduction

Le Cloud Storage permet de stocker des fichiers de manière scalable sans gérer de serveurs physiques. AWS S3 est le service le plus utilisé pour cela. Ce tutoriel vous apprend à intégrer S3 dans une application Node.js, du setup jusqu'aux opérations CRUD. Vous gagnerez du temps en évitant les erreurs classiques de configuration.

Prérequis

  • Node.js 20+
  • Compte AWS avec clés d'accès
  • Connaissances basiques de TypeScript
  • AWS CLI installé (optionnel)

Initialisation du projet

terminal
mkdir s3-cloud-storage
cd s3-cloud-storage
npm init -y
npm install @aws-sdk/client-s3 dotenv
npm install --save-dev typescript @types/node ts-node
npx tsc --init

Cette commande crée un projet TypeScript et installe le SDK AWS S3 v3 moderne ainsi que dotenv pour les variables d'environnement.

Configuration AWS

src/config.ts
import { S3Client } from '@aws-sdk/client-s3';
import * as dotenv from 'dotenv';

dotenv.config();

export const s3Client = new S3Client({
  region: process.env.AWS_REGION || 'eu-west-3',
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
  },
});

Le client S3 est configuré une seule fois. Utilisez toujours des variables d'environnement pour vos clés afin de sécuriser votre code.

Uploader un fichier

src/upload.ts
import { PutObjectCommand } from '@aws-sdk/client-s3';
import { s3Client } from './config';
import * as fs from 'fs';

async function uploadFile(bucket: string, key: string, filePath: string) {
  const fileContent = fs.readFileSync(filePath);
  const command = new PutObjectCommand({
    Bucket: bucket,
    Key: key,
    Body: fileContent,
    ContentType: 'application/pdf',
  });
  await s3Client.send(command);
  console.log(`Fichier uploadé : ${key}`);
}

uploadFile('mon-bucket-2026', 'documents/rapport.pdf', './rapport.pdf');

PutObjectCommand permet d'uploader n'importe quel fichier. Toujours spécifier le ContentType pour un affichage correct dans la console AWS.

Télécharger un fichier

src/download.ts
import { GetObjectCommand } from '@aws-sdk/client-s3';
import { s3Client } from './config';
import * as fs from 'fs';

async function downloadFile(bucket: string, key: string, outputPath: string) {
  const command = new GetObjectCommand({ Bucket: bucket, Key: key });
  const response = await s3Client.send(command);
  const stream = response.Body as NodeJS.ReadableStream;
  const writeStream = fs.createWriteStream(outputPath);
  stream.pipe(writeStream);
  console.log(`Fichier téléchargé : ${outputPath}`);
}

downloadFile('mon-bucket-2026', 'documents/rapport.pdf', './downloaded.pdf');

GetObjectCommand retourne un stream. Il faut le piper vers un fichier local pour sauvegarder le contenu.

Lister les objets

src/list.ts
import { ListObjectsV2Command } from '@aws-sdk/client-s3';
import { s3Client } from './config';

async function listFiles(bucket: string, prefix: string = '') {
  const command = new ListObjectsV2Command({ Bucket: bucket, Prefix: prefix });
  const response = await s3Client.send(command);
  response.Contents?.forEach(obj => console.log(obj.Key));
}

listFiles('mon-bucket-2026', 'documents/');

ListObjectsV2Command est la méthode moderne pour lister les fichiers. Le préfixe permet de filtrer par dossier virtuel.

Supprimer un objet

src/delete.ts
import { DeleteObjectCommand } from '@aws-sdk/client-s3';
import { s3Client } from './config';

async function deleteFile(bucket: string, key: string) {
  const command = new DeleteObjectCommand({ Bucket: bucket, Key: key });
  await s3Client.send(command);
  console.log(`Fichier supprimé : ${key}`);
}

deleteFile('mon-bucket-2026', 'documents/rapport.pdf');

DeleteObjectCommand supprime définitivement un objet. Attention : aucune corbeille n'existe par défaut sur S3.

Bonnes pratiques

  • Toujours utiliser des variables d'environnement pour les credentials
  • Activer le versioning sur vos buckets en production
  • Utiliser des noms de clés cohérents avec des préfixes
  • Limiter les permissions IAM au strict minimum
  • Ajouter des tags sur les objets pour le suivi des coûts

Erreurs courantes à éviter

  • Oublier de configurer la région AWS (erreur de signature)
  • Utiliser des credentials en dur dans le code
  • Ne pas gérer les erreurs réseau avec try/catch
  • Ignorer les limites de taille des objets (5 Go pour PutObject simple)

Pour aller plus loin

Découvrez nos formations complètes sur le cloud pour maîtriser AWS, GCP et Azure.