Wie man auf Objektspeicher auf der CODE-DE Cloud mit s3cmd zugreift

In diesem Artikel erfahren Sie, wie Sie auf Objektspeicher von CODE-DE unter Linux mit s3cmd zugreifen können, ohne es als Dateisystem zu mounten. Dies kann auf einer virtuellen Maschine in der CODE-DE Cloud oder von einem lokalen Linux-Computer aus erfolgen.

Was wir behandeln werden

  • Objektspeicher vs. Standard-Dateisystem

  • Terminologie: Container und Bucket

  • Konfigurieren von s3cmd

  • S3 Pfade in s3cmd

  • Auflistung von Containern

  • Erstellen eines Containers

  • Hochladen einer Datei in einen Container

  • Auflisten von Dateien und Verzeichnissen des Stammverzeichnisses eines Containers

  • Auflisten von Dateien und Verzeichnissen, die sich nicht im Stammverzeichnis eines Containers befinden

  • Entfernen einer Datei aus einem Container

  • Herunterladen einer Datei aus einem Container

  • Prüfen, wie viel Speicherplatz in einem Container verwendet wird

  • Entfernen des gesamten Containers

Voraussetzungen

Nr. 1 Konto

Sie benötigen ein CODE-DE Konto mit Zugriff auf die Horizon-Schnittstelle: https://cloud.fra1-1.cloudferro.com/auth/login/?next=/.

Nr. 2 Aktuelle EC2-Zugangsdaten

Sie müssen EC2-Anmeldedaten generieren. Erfahren Sie hier mehr: Erstellen und Verwalten von EC2-Anmeldedaten auf CODE-DE

Nr. 3 Ein Linux-Computer oder eine virtuelle Maschine

Sie benötigen eine virtuelle Linux-Maschine oder einen lokalen Linux-Computer. Dieser Artikel wurde für Ubuntu 22.04 geschrieben. Andere Betriebssysteme können funktionieren, sind aber nicht Gegenstand dieses Artikels und erfordern möglicherweise eine Anpassung der Befehle.

Wenn Sie eine virtuelle Maschine verwenden möchten, die auf CODE-DE gehostet wird und Sie diese noch nicht erstellt haben, kann einer dieser Artikel helfen:

Nr. 4 s3cmd installiert

Sie müssen s3cmd auf Ihrer virtuellen Maschine oder Ihrem Computer installiert haben. Erfahren Sie hier mehr:

Nr. 5 Wissen über den Umgang mit s3cmd und seiner Konfigurationsdatei

s3cmd speichert seine Konfiguration in Konfigurationsdateien, eine Datei pro Verbindung. Sie müssen entscheiden, wo Sie die Verbindungsdaten für die Objektspeicherung aufbewahren wollen. Hier erfahren Sie mehr:

Objektspeicher vs. Standard-Dateisystem

Objektspeicher verwendet Objekte und keine Dateien und Ordner. Zur Vereinfachung werden diese Objekte im Horizon Dashboard (Abschnitt Objektspeicher -> Container) als Dateien und Ordner dargestellt. Diese Darstellung ist in der Regel sinnvoll, aber es gibt Fälle, in denen sich die Objektspeicherung deutlich von einem herkömmlichen Dateisystem unterscheidet.

In herkömmlichen Dateisystemen ist es beispielsweise nicht möglich, eine Datei und einen Ordner mit demselben Namen am selben Ort zu speichern. Wenn Sie eine Datei mit dem Namen irgendwas in einem Verzeichnis haben, können Sie kein Verzeichnis mit dem Namen irgendwas am selben Ort erstellen.

In der Objektspeicherung ist dies jedoch möglich. Ein Pfad kann sowohl ein Objekt namens irgendwas/ als auch ein Objekt namens irgendwas enthalten. Ersteres wird vom Horizon Dashboard als Ordner mit dem Namen irgendwas dargestellt, letzteres als herunterladbare Datei mit dem Namen irgendwas.

Terminologie: Container und Bucket

Die Begriffe Container (verwendet vom Horizon-Dashboard) und Bucket (verwendet von s3cmd) werden in diesem Artikel synonym verwendet und beschreiben dieselbe Sache.

Konfigurieren von s3cmd

In diesem Artikel wird die Datei storage-access im Verzeichnis /home/eouser als Beispielkonfigurationsdatei verwendet; Sie können den Dateinamen und das Verzeichnis nach Belieben ändern und die Befehle entsprechend anpassen.

Mit folgendem Befehl wird der Prozess der Konfiguration von s3cmd gestartet:

s3cmd -c /home/eouser/storage-access --configure

Es sollte eine Reihe von Fragen erscheinen. Beantworten Sie sie wie unten gezeigt, aber ersetzen Sie access_key und secret_key durch den access- bzw. secret-Schlüssel, den Sie unter Voraussetzung Nr. 2 erhalten haben. Ersetzen Sie außerdem your_password durch das Passwort für Ihr Konto. Drücken Sie nach der Beantwortung jeder Frage die Eingabetaste.

New settings:
Access Key: access_key
Secret Key: secret_key
Default Region: default
S3 Endpoint: 
DNS-style bucket+hostname:port template for accessing a bucket: 
Encryption password: your_password
Path to GPG program: /usr/bin/gpg
Use HTTPS protocol: Yes
HTTP Proxy server name:
HTTP Proxy server port: 0
New settings:
Access Key: access_key
Secret Key: secret_key
Default Region: default
S3 Endpoint: s3.fra1-1.cloudferro.com
DNS-style bucket+hostname:port template for accessing a bucket: s3.fra1-1.cloudferro.com
Encryption password: your_password
Path to GPG program: /usr/bin/gpg
Use HTTPS protocol: Yes
HTTP Proxy server name:
HTTP Proxy server port: 0

Nachdem Sie die Konfiguration eingegeben haben, sollten Sie gefragt werden, ob sie die Konfiguration testen wollen:

Test access with supplied credentials? [Y/n]

Antworten Sie mit Y und drücken Sie Enter.

Warten Sie, bis der Test abgeschlossen ist. Dies sollte nicht länger als ein paar Sekunden dauern. Wenn der Vorgang erfolgreich war, sollten Sie die folgende Meldung erhalten:

Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Success. Encryption and decryption worked fine :-)

Save settings? [y/N]

Antworten Sie erneut mit y und drücken Sie die Eingabetaste..

Sie sollten eine entsprechende Bestätigung erhalten:

Configuration saved to 'storage-access'

Ihr Terminalfenster sollten für weitere Eingaben bereit sein.

S3-Pfade in s3cmd

Wenn Sie von Ihrem Projekt aus auf den Objektspeicher zugreifen, verwendet s3cmd eine Pfadstruktur, die mit s3:// beginnt und von dem Namen des Containers gefolgt wird, der mit einem Schrägstrich endet. Danach haben Sie einen Pfad, dessen Elemente durch /-Zeichen getrennt sind. Was beispielsweise im Horizon-Dashboard als Datei mit dem Namen meine-datei.txt in einem Verzeichnis mit dem Namen mein-ordner in einem Container mit dem Namen mein-container angezeigt wird, wird von s3cmd als s3://mein-container/mein-ordner/meine-datei.txt bezeichnet.

Auflistung von Containern

Um Ihre Container aufzulisten, führen Sie den folgenden Befehl aus:

s3cmd -c /home/eouser/storage-access ls

Wenn Sie keine Container haben, sollte die Ausgabe des Befehls leer sein.

Wenn Sie Container haben, sollten Sie deren Liste erhalten, zum Beispiel:

2024-01-23 14:21  s3://my-files
2024-01-23 14:21  s3://my-other-files

Erstellen eines Containers

Sie können s3cmd verwenden, um einen Container zu erstellen. Führen Sie dazu den folgenden Befehl aus (ersetzen Sie my-bucket durch den Namen, den Sie für Ihr Bucket wählen möchten):

s3cmd -c /home/eouser/storage-access mb s3://my-bucket

Wenn der Prozess erfolgreich war, sollten Sie die folgende Ausgabe erhalten:

Bucket 's3://my-bucket/' created

Ihr Container sollte nun gelistet werden, wenn Sie den Befehl s3cmd ls auf Ihrer Verbindung ausführen:

2024-01-04 10:49  s3://my-bucket

Fehlersuche

Container existiert bereits

Wenn Sie beim Versuch, einen neuen Container zu erzeugen, eine Ausgabe wie diese erhalten:

ERROR: Bucket 'my-bucket' already exists
ERROR: S3 error: 409 (BucketAlreadyExists)

wählen Sie einen anderen Namen für den Container und versuchen Sie es erneut.

Verwendung nicht unterstützter Zeichen im Containernamen

Wenn Sie versuchen, einen Container zu erstellen, dessen Name Zeichen enthält, die nicht zulässig sind, sollten Sie eine Ausgabe wie diese erhalten:

ERROR: Parameter problem: Bucket name 'my_bucket' contains disallowed character '_'. The only supported ones are: lowercase us-ascii letters (a-z), digits (0-9), dot (.) and hyphen (-).

Achten Sie in diesem Fall darauf, dass Sie nur unterstützte Zeichen verwenden.

Hochladen einer Datei in einen Container

Um eine Datei in einen Container hochzuladen, geben Sie den folgenden Befehl ein. Ersetzen Sie /home/eouser/my-file.txt durch den Namen und den Speicherort der Datei, die Sie hochladen möchten. Ersetzen Sie my-bucket/my-directory durch den korrekten S3-Pfad.

s3cmd -c /home/eouser/storage-access put /home/eouser/my-file.txt s3://my-bucket/my-directory/

Achten Sie darauf, dass Sie den Pfad mit einem Schrägstrich abschließen. Wenn Sie den Schrägstrich weglassen, wird die Datei in Horizon nicht in den von Ihnen angegebenen Ordner gepeichert, sondern wird hochgeladen und unter dem ursprünglichen Ordner-Namen abgespeichert. Wenn Sie möchten, dass Horizon den Ordner direkt im Stammordner“ des Containers anzeigt, geben Sie nur s3://, gefolgt vom Namen Ihres Containers als Pfad ein.

Die Ausgabe sollte den Hochladevorgang anzeigen. Sobald er erfolgreich war, stehen Sie auf der Eingabeaufforderung.

Auflisten von Dateien und Ordnern im Stammverzeichnisses eines Containers

Um Dateien und Ordner innerhalb des Stammverzeichnisses eines Containers aufzulisten, führen Sie den Befehl s3cmd ls auf den Namen des Containers mit vorangestelltem s3:// aus

Um zum Beispiel den Inhalt des Containers my-files aufzulisten, führen Sie folgenden Befehl aus:

s3cmd -c /home/eouser/storage-access ls s3://my-files

Der folgende Befehl, der mit einem Schrägstrich endet, sollte für diesen Zweck ebenfalls funktionieren:

s3cmd -c /home/eouser/storage-access ls s3://my-files/

Nehmen wir an, der von Ihnen verwendete Speicherort enthält nur ein Verzeichnis mit dem Namen some-directory, das andere Dateien enthalten kann oder auch nicht, und eine Datei namens text-file.txt. In diesem Fall sieht die Ausgabe wie folgt aus:

                          DIR  s3://my-files/some-directory/
2024-01-23 14:39           10  s3://my-files/text-file.txt

Auflisten von Dateien und Ordnern, die sich nicht im Stammverzeichnis eines Containers befinden

Um Dateien aufzulisten, die Horizon als Ordner anzeigt, verwenden Sie den vollständigen Pfad, der durch Schrägstriche getrennt ist (schließen Sie ihn ebenfalls mit einem Schrägstrich ab). Um zum Beispiel den Inhalt des Ordners some-other-directory innerhalb des Ordners some-directory in einem Container namens my-files aufzulisten, führen Sie aus:

s3cmd -c /home/eouser/storage-access ls s3://my-files/some-directory/some-other-directory/

Als Ergebnis sollte eine Liste der dort befindlichen Objekte ausgegeben werden, zum Beispiel :

2024-01-23 14:30            0  s3://my-files/some-directory/some-other-directory/
2024-01-23 14:32           19  s3://my-files/some-directory/some-other-directory/some-other-file.txt
2024-01-23 14:31           19  s3://my-files/some-directory/some-other-directory/yet-another-file.txt

Beenden Sie Pfade mit Schrägstrich bei der Verwendung von s3cmd ls

Wenn Sie den Inhalt von Verzeichnissen mit dem Befehl s3cmd ls auflisten, achten Sie darauf, die Pfade mit einem Schrägstrich abzuschließen. So können Sie zum Beispiel die Dateien auflisten, die sich im Ordner some-directory in einem Container namens my-files befinden:

s3cmd -c /home/eouser/storage-access ls s3://my-files/some-directory/

In diesem Fall erhalten Sie eine korrekte Ausgabe. Beachten Sie, dass in diesem Beispiel das Verzeichnis some-other-directory Dateien enthalten kann oder auch nicht:

                          DIR  s3://my-files/some-directory/some-other-directory/
2024-01-23 14:25            0  s3://my-files/some-directory/
2024-01-23 14:27           15  s3://my-files/some-directory/another-file.txt
2024-01-23 14:28           23  s3://my-files/some-directory/first-file.txt

Wenn Sie jedoch den Schrägstrich am Ende weglassen,

s3cmd -c /home/eouser/eodata-access ls s3://my-files/some-directory

beinhaltet Ihre Ausgabe nur Ihre Anfrage mit einem Schrägstrich am Ende:

DIR  s3://my-files/some-directory/

Entfernen einer Datei aus einem Container

Um eine Datei aus einem Container zu löschen, führen Sie den Befehl s3cmd rm mit dem Pfad und dem Namen der Datei aus, die Sie entfernen möchten. Zum Beispiel:

s3cmd -c /home/eouser/storage-access rm s3://my-bucket/my-folder/my-file.txt

Sie sollten eine Bestätigung wie diese erhalten:

delete: 's3://my-bucket/my-folder/my-file.txt'

Herunterladen einer Datei aus einem Container

Um eine Datei aus dem Bucket auf Ihre lokale Festplatte herunterzuladen, führen Sie den Befehl s3cmd get mit dem vollständigen Pfad zu der Datei aus, die Sie herunterladen möchten. Beispiel:

s3cmd -c /home/eouser/storage-access get s3://my-bucket/my-folder/my-file.txt

Der Download-Prozess in das aktuelle Arbeitsverzeichnis sollte beginnen.

Fehlersuche

Wenn die Datei im aktuellen Arbeitsverzeichnis bereits vorhanden ist, sollten Sie die folgende Ausgabe erhalten:

ERROR: Parameter problem: File ./my-file.txt already exists. Use either of --force / --continue / --skip-existing or give it a new name.

Wenn Sie den Parameter –force verwenden, wird eine bereits existierende Datei überschrieben. Der Parameter –continue kann verwendet werden, um einen angehaltenen Download-Prozess fortzusetzen. Wenn Sie einer Datei einen anderen Namen geben wollen, fügen Sie diesen durch ein Leerzeichen getrennt hinter den S3-Pfad ein. Zum Beispiel:

s3cmd -c /home/eouser/storage-access get s3://my-bucket/my-folder/my-file.txt another-name.txt

Überprüfung der Speicherauslastung eines Containers

Um zu prüfen, wie viel Speicherplatz ein bestimmter Container belegt, verwenden Sie den Befehl s3cmd du. Wenn Sie für Menschen lesbare Werte haben möchten, verwenden Sie den Parameter -H. Zum Beispiel:

s3cmd -c /home/eouser/storage-access du -H s3://my-bucket

Die Ausgabe sollte wie folgt aussehen:

318M       2 objects s3://my-bucket/

Löschen des gesamten Containers

Sie können s3cmd verwenden, um einen Container komplett zu löschen. Dazu muss er leer sein.

Führen Sie den Befehl s3cmd rb aus, gefolgt von einem Leerzeichen, s3:// und dem Namen des Buckets. Um zum Beispiel den Container mit dem Namen my-bucket zu entfernen, führen Sie diesen Befehl aus:

s3cmd -c /home/eouser/storage-access rb s3://my-bucket

Wenn der Vorgang erfolgreich war, sollten Sie eine entsprechende Bestätigung erhalten:

Bucket 's3://my-bucket/' removed

Was als nächstes zu tun ist

Sie können s3cmd verwenden, um Ihren Container außerhalb Ihres Projekts freizugeben, indem Sie Freigabe-Richtlinien anwenden. Dieser Artikel enthält weitere Informationen:

Teilen von S3 Objektspeicher mit s3 Bucket Policy auf CODE-DE

s3cmd kann auch für den Zugriff auf das Erdbeobachtungsdaten-Repository auf CODE-DE verwendet werden:

Wie man mit s3cmd auf EODATA zugreift auf CODE-DE