Ein Berichtsverzeichnis synchronisieren

AWSBeginner
Jetzt üben

Einführung

Ein Team veröffentlicht ein Verzeichnis mit täglichen CSV-Berichten. Du lädst das Verzeichnis hoch, veröffentlichst Änderungen und entfernst einen veralteten gespeicherten Bericht, während du ein separates Archiv schützt.

Schließe zuerst Dokumente mit Schlüsseln und Metadaten organisieren ab, einschließlich der Konzepte zu Buckets, Schlüsseln, Präfixen und Downloads. Diese neue VM stellt die CLI-Verbindung, lokale Berichte und einen Bucket bereit, der nur das Archiv enthält. Verwende Terminal für Befehle und den Tab AWS View daneben, um deine Änderungen zu beobachten.

Bezug zu Zertifizierungen

Dieses Lab bietet praktische Übungen zu den folgenden Prüfungsthemen.

Veröffentliche das vorbereitete Berichtsverzeichnis

In diesem Schritt veröffentlichst du zwei lokale Berichte unter dem Präfix daily/ und lernst, wie ihre Dateinamen auf Objektschlüssel abgebildet werden.

Wechsle mit cd (change directory, Verzeichnis wechseln) in den Arbeitsbereich:

cd /home/labex/project

Untersuche das vorbereitete Berichtsverzeichnis mit ls, das seine lokalen Dateinamen auflistet:

ls reports

Die Liste enthält monday.csv und tuesday.csv. Beide sind CSV-Dateien: Eine Kopfzeile benennt die Spalten und Kommas trennen die Werte in jedem Datensatz. Untersuche den Montagsbericht mit cat, das den Inhalt einer Datei ausgibt:

cat reports/monday.csv
date,orders
2026-09-28,120

Liste den vorbereiteten Bucket auf. Bei einem S3-Speicherort zeigt --recursive vollständige Schlüssel im gesamten Bucket an:

aws s3 ls s3://labex-report-delivery/ --recursive

Nur archive/retention.txt ist vorhanden. Das Archiv gehört zu einem separaten Ablauf und muss deine tägliche Synchronisierung überstehen.

aws s3 sync nimmt eine Quelle und ein Ziel entgegen, in dieser Reihenfolge. Es berücksichtigt Dateien im Quellverzeichnis rekursiv; für sync benötigst du kein --recursive. Jeder relative Dateiname wird zu einem Schlüssel unterhalb des Zielpräfixes. reports/monday.csv wird deshalb zu daily/monday.csv und nicht zu daily/reports/monday.csv.

aws s3 sync reports/ s3://labex-report-delivery/daily/

Der Befehl meldet Uploads für Montag und Dienstag; ihre Ausgabereihenfolge kann variieren. Liste den gesamten Bucket erneut auf:

aws s3 ls s3://labex-report-delivery/ --recursive

Du solltest drei Schlüssel finden: archive/retention.txt, daily/monday.csv und daily/tuesday.csv. AWS View zeigt dieselben Objekte. Klicke auf daily/monday.csv, um den gespeicherten zweizeiligen CSV-Bericht zu lesen. Das Archiv bleibt außerhalb des ausgewählten Ziels daily/.

Synchronisiere eine Änderung und einen neuen Bericht

In diesem Schritt aktualisierst du einen Bericht, ergänzt einen weiteren und überträgst diese Änderungen, ohne einen unveränderten Bericht erneut hochzuladen.

Das Ausführen von sync mit derselben Quelle und demselben Ziel ist sicher, wenn sich keine Seite geändert hat:

aws s3 sync reports/ s3://labex-report-delivery/daily/

Es gibt keine Upload-Zeilen, wenn die vorhandenen Dateien bereits aktuell sind. Bei Übertragungen von lokal nach S3 berücksichtigt die CLI, ob der Zielschlüssel fehlt, die Größen abweichen oder die lokale Datei eine neuere Änderungszeit hat. Sie überwacht das Verzeichnis nicht kontinuierlich: Du führst sync aus, wenn du Änderungen veröffentlichen möchtest.

Ergänze den Montagsbericht um eine verspätete Gruppe von 25 Bestellungen. printf gibt den Text in Anführungszeichen aus; \n beendet die Zeile. Das >> der Shell hängt an eine lokale Datei an, statt sie zu ersetzen:

printf '2026-09-28,25\n' >> reports/monday.csv

Untersuche das dreizeilige Ergebnis:

cat reports/monday.csv
date,orders
2026-09-28,120
2026-09-28,25

Erstelle den Mittwochsbericht. Hier schreibt > eine neue Datei und ersetzt vorhandenen Inhalt an diesem Pfad:

printf 'date,orders\n2026-09-30,150\n' > reports/wednesday.csv

Vor der Veröffentlichung hat der gespeicherte Montagsbericht weiterhin zwei Zeilen und Mittwoch fehlt in AWS View. Allein das Bearbeiten lokaler Dateien verändert S3 nicht.

Veröffentliche erneut:

aws s3 sync reports/ s3://labex-report-delivery/daily/

Du solltest Uploads für den geänderten Montagsbericht und den neuen Mittwochsbericht sehen. Dienstag ist unverändert und wird deshalb nicht hochgeladen. Dies ist eine inkrementelle Übertragung: Sie kopiert Änderungen, statt einfach jede Datei zu kopieren.

In AWS View zeigt Montag jetzt die verspätete Gruppe und Mittwoch erscheint. Lade Montag auf einen separaten lokalen Pfad herunter, damit du den tatsächlich gespeicherten Inhalt vergleichen kannst:

aws s3 cp s3://labex-report-delivery/daily/monday.csv retrieved-monday.csv

cmp vergleicht Dateien Byte für Byte. Wenn die Inhalte übereinstimmen, endet es erfolgreich, ohne Unterschiede auszugeben. && gibt die Meldung erst nach diesem erfolgreichen Vergleich aus:

cmp reports/monday.csv retrieved-monday.csv && echo 'Updated report matches'
Updated report matches

Dies bestätigt, dass die Aktualisierung den Speicher erreicht hat; eine erfolgreiche Befehlsmeldung allein würde dir nicht sagen, welche Bytes gespeichert wurden.

Das Beispiel unten zeigt den gespeicherten Montagsbericht nach der Aktualisierung aufgeklappt. Mittwoch ist vorhanden und das separate Archiv bleibt im Bucket:

Aktualisiertes Berichtsverzeichnis und erhaltenes Archiv

Spiegle nur das Präfix daily/

In diesem Schritt entfernst du einen veralteten Bericht am Ziel und schützt dabei das unbeteiligte Archiv.

Das Synchronisierungsziel ist daily/; archive/ bleibt außerhalb dieses Umfangs.

Präfixumfang der Synchronisierung

Der Dienstagsbericht gehört nicht mehr zur veröffentlichten täglichen Sammlung. Entferne nur diese lokale Datei mit rm (remove, entfernen). Dies ist ein lokaler Dateisystembefehl, daher löscht er kein S3-Objekt:

rm reports/tuesday.csv

Führe erneut eine gewöhnliche Synchronisierung aus:

aws s3 sync reports/ s3://labex-report-delivery/daily/

Liste das Zielpräfix auf:

aws s3 ls s3://labex-report-delivery/daily/ --recursive

Dienstag erscheint weiterhin. Standardmäßig kopiert sync fehlende oder aktualisierte Dateien, lässt aber zusätzliche Objekte am Ziel bestehen. Allein das Entfernen einer Quelldatei entfernt ihre gespeicherte Kopie nicht.

Eine Spiegelung gleicht den Dateibestand des Ziels an die Quelle an, einschließlich Löschungen. --delete entfernt Zielschlüssel, zu denen keine passende Quelldatei existiert. Kombiniere es zuerst mit --dryrun, das vorgesehene Operationen anzeigt, ohne sie auszuführen:

aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete --dryrun

Der Probelauf sollte nur die Löschung von daily/tuesday.csv auflisten. Montag und Mittwoch entsprechen der Quelle und archive/retention.txt liegt außerhalb von daily/. Halte das Zielpräfix genau ein: Die Verwendung der Bucket-Wurzel würde das Archiv in den Umfang aufnehmen.

Nachdem du die vorgesehene Löschung geprüft hast, führe dieselbe Operation ohne --dryrun aus:

aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete

Der Befehl meldet die Löschung von Dienstag. Untersuche den gesamten Bucket, damit du sowohl das Verschwundene als auch das Erhaltene prüfen kannst:

aws s3 ls s3://labex-report-delivery/ --recursive

Die verbleibenden Schlüssel sind daily/monday.csv, daily/wednesday.csv und archive/retention.txt. Öffne das Archivobjekt in AWS View und bestätige, dass es weiterhin Keep the archive outside daily synchronization. enthält. Deine Spiegelung betraf nur das gewählte Präfix.

Entferne die Speicherressourcen dieses Labs

In diesem Schritt entfernst du die Berichte und das Archiv dieser Übung und anschließend den leeren Bucket.

Das Archiv musste die tägliche Spiegelung überstehen, ist aber ebenfalls eine entbehrliche Ressource dieser Übung. Es kann jetzt ausdrücklich entfernt werden. Entferne zuerst die zwei täglichen Berichtsobjekte mit einer rekursiven Operation, die auf daily/ beschränkt ist:

aws s3 rm s3://labex-report-delivery/daily/ --recursive

Die Ausgabe bestätigt die zwei Berichtslöschungen. Entferne das Archiv anhand seines vollständigen Schlüssels:

aws s3 rm s3://labex-report-delivery/archive/retention.txt

Bestätige, dass der Bucket leer ist:

aws s3 ls s3://labex-report-delivery/ --recursive

Ein erfolgreicher Befehl ohne Objektzeilen belegt den leeren Zustand. aws s3 rb (remove bucket, Bucket entfernen) kann jetzt den Behälter entfernen:

aws s3 rb s3://labex-report-delivery

Die Ausgabe lautet remove_bucket: labex-report-delivery. Prüfe die verbleibenden Buckets:

aws s3 ls

Es bleiben keine Bucket-Zeilen übrig. AWS View zeigt nach einer erfolgreichen Zustandsabfrage No buckets. Deine lokalen Berichtsdateien bleiben zur Prüfung erhalten; das Löschen von Speicherressourcen entfernt diese lokalen Kopien nicht.

Zusammenfassung

Du hast ein lokales Berichtsverzeichnis unter einem S3-Präfix veröffentlicht, sync ohne Änderungen wiederholt, einen geänderten Bericht und einen neuen Bericht hochgeladen und eine abgerufene Aktualisierung mit ihrer Quelle verglichen. Du hast gesehen, dass gewöhnliches sync zusätzliche Zielobjekte erhält, und anschließend eine auf daily/ begrenzte Spiegelung mit --delete vorab geprüft und ausgeführt.

Das Archiv blieb bei dieser Operation erhalten, weil es außerhalb des Zielpräfixes lag. Du hast sowohl den neuen Zustand als auch die erhaltenen Daten geprüft, bevor du alle Speicherressourcen des Labs entfernt hast. Wähle in zukünftigen Abläufen Quelle, Ziel und Löschumfang aus, bevor du sync ausführst.