Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Le stockage d’objets S3 : clés et préfixes

Après cette leçon: Je peux retrouver des fichiers d’un bucket grâce à un préfixe.

Leçon de 55 min5 commandesLab Cloud : s’exercer avec des buckets S3, des files SQS et des tables DynamoDB en ligne de commande AWS

Trouver les journaux d’octobre parmi un million

Une boutique range ses journaux web dans un bucket S3, un fichier par jour depuis des années. Vous voulez seulement ceux d’octobre. Ouvrir un million de fichiers n’est pas possible.

S3 sait lister les fichiers dont le nom commence d’une certaine façon. Cette leçon montre comment lister un bucket S3 par préfixe.

À la fin de cette leçon

Remarque

Je peux retrouver des fichiers d’un bucket grâce à un préfixe.

Mots-clés

MotCe que ça veut direExemple
Objetun fichier rangé, avec ses informations
Cléle nom complet d’un objet dans un bucketjournaux/2026-10-01/web.log
Préfixele début d’une clé
Délimiteurun caractère qui coupe une clé en niveaux/
Préfixe communun début en forme de dossier que plusieurs clés partagent

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un bucket contient des objets à clé

Un bucket contient des objets. Un objet, ce sont les octets d’un fichier plus des informations comme sa taille. Chaque objet a une clé, son nom complet, et c’est par elle qu’on le retrouve.

Il n’y a pas d’arbre de dossiers à l’intérieur. Le bucket est une seule liste plate de clés. Une clé comme journaux/2026-10-01/web.log est juste un long nom qui contient des barres obliques.

Lire un listing

Code: python
reponse = {
    "Name": "boutique-journaux",
    "Prefix": "",
    "KeyCount": 4,
    "IsTruncated": False,
    "Contents": [
        {"Key": "images/chat.png", "Size": 4, "StorageClass": "STANDARD"},
        {"Key": "journaux/2026-10-01/web.log", "Size": 17, "StorageClass": "STANDARD"},
        {"Key": "journaux/2026-10-02/web.log", "Size": 6, "StorageClass": "STANDARD"},
        {"Key": "lisezmoi.txt", "Size": 5, "StorageClass": "STANDARD"},
    ],
}
for objet in reponse["Contents"]:
    print(objet["Key"], objet["Size"])
# Additionnez les Size de tous les objets et affichez le total.

Erreur fréquente

Attention

Beaucoup croient qu’un bucket S3 contient de vrais dossiers. Ce n’est pas le cas. La barre oblique est seulement un caractère de la clé. Un dossier apparaît dans un listing parce que plusieurs clés commencent pareil, et il disparaît avec son dernier objet.

Un préfixe liste les clés qui commencent pareil

En listant un bucket, vous pouvez donner un préfixe. S3 ne renvoie alors que les clés qui commencent par lui. Le préfixe journaux/2026-10-01/ trouve un jour de journaux et rien d’autre.

C’est S3 qui filtre, donc votre code n’a jamais à lire tout le bucket. La réponse rappelle le préfixe envoyé et compte les clés trouvées dans KeyCount.

Filtrer les clés par préfixe

Code: python
cles = [
    "images/chat.png",
    "journaux/2026-10-01/base.log",
    "journaux/2026-10-01/web.log",
    "journaux/2026-10-02/web.log",
    "lisezmoi.txt",
]
prefixe = "journaux/2026-10-01/"
trouvees = []
for cle in cles:
    if cle.startswith(prefixe):
        trouvees.append(cle)
print("KeyCount :", len(trouvees))
print(trouvees)
# Mettez "journaux/" comme préfixe et relancez. Combien de clés maintenant ?

Un délimiteur regroupe les clés en dossiers

Imaginons que vous vouliez les dossiers placés juste sous journaux/, pas tous les fichiers. Donnez le délimiteur / en plus du préfixe. S3 coupe chaque clé à la première barre oblique après le préfixe.

Les clés qui partagent la même coupure reviennent une seule fois, comme préfixe commun, dans CommonPrefixes. Les clés sans barre oblique après le préfixe restent dans Contents, comme avant.

Trouver les dossiers sous journaux/

Code: python
cles = [
    "journaux/2026-10-01/base.log",
    "journaux/2026-10-01/web.log",
    "journaux/2026-10-02/web.log",
]
prefixe = "journaux/"
communs = []
for cle in cles:
    reste = cle[len(prefixe):]
    barre = reste.find("/")
    if barre != -1:
        dossier = prefixe + reste[:barre + 1]
        if dossier not in communs:
            communs.append(dossier)
prefixes = []
for un in communs:
    prefixes.append({"Prefix": un})
reponse = {"Prefix": prefixe, "Delimiter": "/", "CommonPrefixes": prefixes}
print(reponse)
# Ajoutez la clé "journaux/2026-10-03/web.log" à cles. Relancez.

Une clé absente répond de deux façons

Demander un objet qui n’existe pas est une erreur. Les deux appels diffèrent. get_object répond avec le Code NoSuchKey. head_object, qui ne demande que les informations, n’a pas de corps pour porter un nom : son Code est "404".

Les deux ont le statut 404. Testez le statut quand vous voulez couvrir les deux cas.

Essayez-le dans le lab cloud

Le lab cloud est une copie d'entraînement de S3, SQS et DynamoDB. Appuyez sur Démarrer le lab dans la barre, puis sur Exécuter pour chaque commande ci-dessous. Elles utilisent la vraie ligne de commande AWS, les mêmes mots marchent donc sur un vrai compte. Les deux dernières commandes affichent une liste avec le dossier logs/2026-10-01/ dans CommonPrefixes, puis l'erreur NoSuchKey. Cette étape sert à s'exercer. Le travail ci-dessous reste du Python simple : vous pouvez le faire sans le lab.

Donnez une clé inventée et l'adresse du lab

Commande
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=us-east-1 AWS_ENDPOINT_URL=http://cloud:4566

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créez un bucket

Commande
aws s3 mb s3://prefix-lab

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Rangez un objet sous une clé à barres

Commande
aws s3 cp /etc/hostname s3://prefix-lab/logs/2026-10-01/web.log

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Listez avec un préfixe et un délimiteur

Commande
aws s3api list-objects-v2 --bucket prefix-lab --prefix logs/ --delimiter /

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Demandez une clé qui n'existe pas

Commande
aws s3api get-object --bucket prefix-lab --key nothing.txt /dev/null

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À propos de ce labo et de sa source: Lab Cloud : s’exercer avec des buckets S3, des files SQS et des tables DynamoDB en ligne de commande AWS

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.