Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

S3-Objektspeicher: Schlüssel, Präfixe und Ordner

Nach dieser Lektion: Ich kann Dateien in einem Bucket über ein Präfix finden.

Lektion, 55 Min.5 BefehleCloud-Lab: S3-Buckets, SQS-Warteschlangen und DynamoDB-Tabellen mit der AWS-Befehlszeile üben

Die Logs vom Oktober unter einer Million Dateien

Ein Webshop legt seine Protokolle in einem S3-Bucket ab, eine Datei pro Tag, seit Jahren. Sie brauchen nur die vom Oktober. Eine Million Dateien zu öffnen kommt nicht in Frage.

S3 liefert Ihnen auf Wunsch eine Liste der Dateien, deren Namen auf bestimmte Art anfangen. In dieser Lektion lernen Sie, einen S3-Bucket nach Präfix aufzulisten.

Am Ende dieser Lektion

Notiz

Ich kann Dateien in einem Bucket über ein Präfix finden.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Objekteine gespeicherte Datei samt ihren Angaben
Key (Schlüssel)der volle Name eines Objekts im Bucketprotokolle/2026-10-01/web.log
Präfixder Anfang eines Keys
Trennzeichenein Zeichen, das einen Key in Ebenen teilt/
Gemeinsames Präfixein ordnerähnlicher Anfang, den mehrere Keys teilen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Bucket enthält Objekte mit je einem Key

Ein Bucket enthält Objekte. Ein Objekt sind die Bytes einer Datei plus Angaben wie die Größe. Jedes Objekt hat einen Key, seinen vollen Namen. Über den Key finden Sie es.

Innen gibt es keinen Baum aus Ordnern. Der Bucket ist eine einzige flache Liste von Keys. Ein Key wie protokolle/2026-10-01/web.log ist nur ein langer Name, der Schrägstriche enthält.

Run: eine Auflistung lesen

Code: python
antwort = {
    "Name": "shop-protokolle",
    "Prefix": "",
    "KeyCount": 4,
    "IsTruncated": False,
    "Contents": [
        {"Key": "bilder/katze.png", "Size": 4, "StorageClass": "STANDARD"},
        {"Key": "protokolle/2026-10-01/web.log", "Size": 17, "StorageClass": "STANDARD"},
        {"Key": "protokolle/2026-10-02/web.log", "Size": 6, "StorageClass": "STANDARD"},
        {"Key": "lies-mich.txt", "Size": 5, "StorageClass": "STANDARD"},
    ],
}
for objekt in antwort["Contents"]:
    print(objekt["Key"], objekt["Size"])
# Zählen Sie die Size aller Objekte zusammen und geben Sie die Summe aus.

Ein häufiger Fehler

Warnung

Viele denken, ein S3-Bucket habe echte Ordner. Das stimmt nicht. Der Schrägstrich ist nur ein Zeichen im Key. Ein Ordner erscheint in einer Auflistung nur, weil mehrere Keys gleich anfangen. Er verschwindet, sobald sein letztes Objekt gelöscht ist.

Ein Präfix listet Keys, die damit beginnen

Beim Auflisten eines Buckets können Sie ein Präfix mitgeben. S3 liefert dann nur die Keys, die damit anfangen. Das Präfix protokolle/2026-10-01/ findet einen Tag Protokolle und sonst nichts.

S3 filtert, Ihr Code muss also nie den ganzen Bucket lesen. Die Antwort wiederholt Ihr Präfix und zählt die gefundenen Keys in KeyCount.

Run: Keys nach Präfix filtern

Code: python
keys = [
    "bilder/katze.png",
    "protokolle/2026-10-01/db.log",
    "protokolle/2026-10-01/web.log",
    "protokolle/2026-10-02/web.log",
    "lies-mich.txt",
]
praefix = "protokolle/2026-10-01/"
gefunden = []
for key in keys:
    if key.startswith(praefix):
        gefunden.append(key)
print("KeyCount:", len(gefunden))
print(gefunden)
# Ändern Sie praefix in "protokolle/" und drücken Sie Run. Wie viele Keys sind es jetzt?

Ein Trennzeichen fasst Keys zu Ordnern zusammen

Angenommen, Sie wollen die Ordner direkt unter protokolle/ sehen, nicht jede Datei. Geben Sie neben dem Präfix das Trennzeichen / an. S3 schneidet jeden Key am ersten Schrägstrich nach dem Präfix ab.

Keys mit demselben Abschnitt kommen nur einmal zurück, als gemeinsames Präfix, in CommonPrefixes. Keys ohne Schrägstrich nach dem Präfix stehen wie vorher in Contents.

Run: die Ordner unter protokolle/ finden

Code: python
keys = [
    "protokolle/2026-10-01/db.log",
    "protokolle/2026-10-01/web.log",
    "protokolle/2026-10-02/web.log",
]
praefix = "protokolle/"
gemeinsam = []
for key in keys:
    rest = key[len(praefix):]
    strich = rest.find("/")
    if strich != -1:
        ordner = praefix + rest[:strich + 1]
        if ordner not in gemeinsam:
            gemeinsam.append(ordner)
praefixe = []
for eins in gemeinsam:
    praefixe.append({"Prefix": eins})
antwort = {"Prefix": praefix, "Delimiter": "/", "CommonPrefixes": praefixe}
print(antwort)
# Fügen Sie den Key "protokolle/2026-10-03/web.log" zu keys hinzu. Starten Sie noch einmal.

Fehlende Keys antworten auf zwei Arten

Ein einzelnes Objekt anzufordern, das es nicht gibt, ist ein Fehler. Die beiden Aufrufe unterscheiden sich. get_object antwortet mit dem Code NoSuchKey. head_object fragt nur nach den Angaben, und seine Antwort hat keinen Body, der einen Fehlernamen tragen könnte. Darum ist sein Code "404".

Beide haben den Status 404. Prüfen Sie den Status, wenn Sie beide abdecken wollen.

Probieren Sie es im Cloud-Lab aus

Das Cloud-Lab ist eine Übungskopie von S3, SQS und DynamoDB. Klicken Sie in der Leiste auf Lab starten und dann bei jedem Befehl unten auf Ausführen. Sie benutzen die echte AWS-Befehlszeile, dieselben Wörter funktionieren also bei einem echten Konto. Die letzten beiden Befehle zeigen eine Liste mit dem Ordner logs/2026-10-01/ in CommonPrefixes und dann den Fehler NoSuchKey. Dieser Schritt dient zum Üben. Die Aufgabe unten bleibt einfaches Python, Sie können sie also ohne das Lab lösen.

Schlüssel und Adresse des Labs setzen

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

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Einen Bucket anlegen

Befehl
aws s3 mb s3://prefix-lab

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Objekt unter einem Pfad-Schlüssel speichern

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

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Mit Präfix und Trennzeichen auflisten

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

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Nach einem Schlüssel fragen, den es nicht gibt

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

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: Cloud-Lab: S3-Buckets, SQS-Warteschlangen und DynamoDB-Tabellen mit der AWS-Befehlszeile üben

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.