Eucalyptus: Arbeiten mit Walrus

Bei Walrus handelt es sich um den Speicherdienst von Eucalyptus, dessen Schnittstelle zu den Simple Storage Services (S3) von Amazon kompatibel ist. Mittels Walrus können Daten persistent in Buckets und Objekten gespeichert und verwaltet werden.

Für die Verwaltung der Eucalytpus Virtual Machine Images innerhalb von Walrus - also dem Speichern, Registrieren und Löschen - können die offiziellen Amazon Tools genutzt werden. Es existieren aber auch Tools von Drittanbietern die in diesem Artikel vorgestellt werden.

S3 curl

S3 Curl kommuniziert mit Walrus, indem Sicherheitsparameter als Curl Header hinzugefügt werden. Mit S3 Curl stehen Funktionen zum Erstellen, Löschen und Auflisten der Buckets, sowie dem Hoch- und Herunterladen von Objekten und der Verwaltung von Zugriffsrechten zu Verfügung.

Für die Nutzung von S3 Curl wird das "perl-Digest-HMAC package" benötigt. Weiterhin muss in der s3curl.pl der Hostname des "Endpoints" z.B. wie folgt angepasst werden.

my @endpoints = ( 's3.amazonaws.com' );

nach

my @endpoints = ( 'your-host' );

Bei "your-host" handelt es sich um die IP-Adresse bzw. dem Hostnamen auf dem Walrus ausgeführt wird. Für die Authentifizierung ist es notwendig, dass es sich bei "your-host" um den selben Host handelt, der von eucarc für $S3_URL in den Umgebungsvariablen gesetzt wurde.

Beim Anpassen der s3curl.pl darf nur der Hostname, aber nicht die Portnummer oder ein Pfad angegeben werden. Es sollte also nur abc.de und nicht abc.de:8773/services/Walrus verwendet werden!

Bevor die nachfolgenden Befehle ausgeführt werden, sollte sichergestellt sein das "eucarc" eingebunden ist.

~/.euca/eucarc

Dann kann es losgehen. Zunächst wird der Access Key sowie der Secret Key des Amazon Accounts benötigt. An dieser Stelle wäre es vorteilhaft, diese Daten in die ".s3curl" Konfigurationsdatei zu schreiben.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY

Zum Erstellen eines Buckets nutzen wir den nachfolgenden Befehl. Dabei entspricht "bucketName" dem Namen des Buckets der erstellt werden soll.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --put /dev/null -- -s -v $S3_URL/bucketName

Ein Objekt wird mit dem folgenden Befehl erstellt/hochgeladen (put), wobei "objectName" dem Namen des Objekts entspricht, das erstellt werden soll.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --put -- -s -v $S3_URL/bucketName/objectName

Für die Abfrage der MD5 Checksumme, sowie die Größe und das Datum der letzten Änderung an einem Objekt, nutzen wir diesen Befehl.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --head -- -s -v $S3_URL/bucketName/objectName > object.head

cat object.head

Hiermit laden (get) wir ein Objekt.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --get -- -s -v $S3_URL/bucketName/objectName > object

Ein Objekt kann wie folgt gelöscht werden.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --del -- -s -v $S3_URL/bucketName/objectName

Einen Bucket löschen wir mit diesem Befehl. An dieser Stelle ist zu beachten, dass Buckets vollständig leer sein müssen, bevor sie gelöscht werden können.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --del -- -s -v $S3_URL/bucketName

Die Zugriffssrechte für einen Bucket erhalten wie folgt.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --get -- -s -v $S3_URL/bucketName?acl | xmlindent > bucket.acl

Der Inhalt eines Buckets wird mit diesem Befehl angezeigt.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --get -- -s -v $S3_URL/bucketName | xmlindent > bucket.list

Eine Liste aller Buckets von einem Benutzer kann so angezeigt werden.

s3curl.pl --id $EC2_ACCESS_KEY --key $EC2_SECRET_KEY --get -- -s -v $S3_URL | xmlindent > bucketlisting

S3cmd

Mit S3cmd können Daten in Amazon S3 hoch- und heruntergeladen sowie verwaltet werden. Es eignet sich darüber hinaus gut für Skripte und automatisierte Backups die von cron gesteuert werden.

Installation

Zunächst wird python und python-openssl benötigt.

Nach dem Herunterladen und Entpacken von S3cmd muss der Patch unter dem Dateinamen s3cmd-0.9.8.3.patch abgespeichert werden.

Das S3cmd Verzeichnis muss in s3cmd-0.9.8.3 umbenannt und der Patch mittels patch -p1 < s3cmd-0.9.8.3.patch hinzugefügt werden.

Konfiguration

Nun muss eine Konfigurationsdatei mit dem Namen s3cfg.walrus für Walrus erstellt werden, für die folgende Beispielkonfiguration genutzt werden kann.

[default]
access_key = ACCESSKEY
acl_public = False
bucket_location = US
debug_syncmatch = False
default_mime_type = binary/octet-stream
delete_removed = False
dry_run = False
encrypt = False
force = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = False
host_base = localhost:8773
host_bucket = localhost:8773
service_path = /services/Walrus
human_readable_sizes = False
preserve_attrs = True
proxy_host =
proxy_port = 0
recv_chunk = 4096
secret_key = SECRET
send_chunk = 4096
use_https = False
verbosity = WARNING

Als Beispielkonfiguration für Amazon S3 kann die folgende verwendet werden.

[default]
access_key = ACCESSKEY
acl_public = False
bucket_location = US
debug_syncmatch = False
default_mime_type = binary/octet-stream
delete_removed = False
dry_run = False
encrypt = False
force = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = False
human_readable_sizes = False
preserve_attrs = True
proxy_host =
proxy_port = 0
recv_chunk = 4096
secret_key = SECRET
send_chunk = 4096
simpledb_host = sdb.amazonaws.com
use_https = False
verbosity = WARNING

Nutzung von S3cmd

Erstellen eines Bucket.

s3cmd -c s3cfg.walrus mb s3://testbucket

Löschen eines Bucket.

s3cmd -c s3cfg.walrus rb s3://testbucket

Auflisten aller Buckets.

s3cmd -c s3cfg.walrus ls

Den Inhalt eines Buckets anzeigen.

3cmd -c s3cfg.walrus ls s3://testbucket

Ein Objekt hochalden (put).

s3cmd -c s3cfg.walrus put s3://testbucket

Ein Objekt laden (get).

s3cmd -c s3cfg.walrus get s3://testbucket/

Löschen eines Objekts.

s3cmd -c s3cfg.walrus del s3://testbucket/

Quelle