Bei den Euca2ools handelt es sich um eine Sammlung von Kommadozeilentools, die dazu dienen mit Web Services, die auf einer REST-API (wie die Amazon Web Services EC2 und S3) basieren, zu kommunizieren.
Die Tools können gleichermaßen mit den Amazon Web Services und der Open Source Cloud Infrastruktur von Eucalyptus verwendet werden. Das Design der Euca2ools basiert auf den Kommandozeilentools api-tools und ami-tools von Amazon und verfügt damit weitestgehend über dieselben Optionen und Umgebungsvariablen.
Die Euca2ools sind von Grund auf vollständig in Python implementiert und beruhen auf der Boto library und dem M2Crypto toolkit.
Funktionsübersicht
- Abfrage der Verfügbarkeitszonen (Cluster im Eucalyptus Kontext)
- SSH Key Management (add, list, delete)
- Virtual Machine Management (start, list, stop, reboot, get console output)
- Security Group Management
- Volume und Snapshot Management (attach, list, detach, create, bundle, delete)
- Image Management (bundle, upload, register, list, deregister)
- IP-Adressen Management (allocate, associate, list, release)
Installation
Installation aus den Sourcen
Die Euca2ools können anhand der Quellen oder mit den DEB oder RPM Packages installiert werden. Alle aktuellen Versionen stehen dazu unter http://open.eucalyptus.com/downloads zum Herunterladen bereit.
Folgende Versionen von Python, der Boto library und M2Crypto sind erforderlich, um die vorhandenen Abhängigkeiten zu erfüllen.
- Python 2.5 (dev) oder höher
- Boto 1.8d oder höher
- M2Crypto 0.19.1 oder höher
Zunächst wird $VERSION auf 1.2 wie folgt gesetzt.
export VERSION="1.2"
Als nächstes muss die Euca2ools Version euca2ools-$VERSION-src-deps.tar.gz heruntergeladen werden. Diese beinhaltet boto-1.8d.tar.gz und M2Crypto-0.19.1.tar.gz
Nun können die Abhängigkeiten erstellt und die Installation vorgenommen werden.
Dazu ist es notwendig python-dev, swig, help2man, und libssl-dev zu installieren, um die folgenden Libraries zu erstellen.
Wir laden also euca2ools-$VERSION.tar.gz und euca2ools-$VERSION-src-deps.tar.gz herunter. Weiterhin gehen wir davon aus, dass sich diese Tarballs im aktuellen Verzeichnis befinden.
Installation von Boto
tar zvxf euca2ools-$VERSION-src-deps.tar.gz
cd euca2ools-$VERSION-src-deps
tar zxvf boto-1.8d.tar.gz
cd boto-1.8d
sudo python setup.py install
cd ..
Installation von M2Crypto
tar zxvf M2Crypto-0.19.1.tar.gz
cd M2Crypto-0.19.1
sudo python setup.py install
cd ..
Installation der Euca2ools in /usr/local/bin, inkl. dem Hinzufügen zu $PATH.
cd ..
tar zxvf euca2ools-$VERSION.tar.gz
cd euca2ools-$VERSION
sudo make
export PATH=/usr/local/bin:$PATH
Deinstallation
sudo make uninstall
Nun können die euca2ools, boto und M2Crypto aus dem Python Installationsverzeichnis wieder entfernt werden.
Installation mit CentOS 5
Dieses Vorgehen beschreibt die Installation der Euca2ools für CentOS 5. Dazu muss zunächst der Wert der Variablen $VERSION wie folgt auf 1.2 gesetzt werden.
export VERSION=1.2
Es gibt 2 Möglichkeiten, um die Pakete zu erhalten:
Yum
Die Packages sind in diesem Fall über das Yum Repository erhältlich. Um diese Variante zu nutzen, muss die Datei “/etc/yum.repos.d/euca.repo” mit folgendem Inhalt erstellt werden.
[euca2ools]
name=Euca2ools
baseurl=http://www.eucalyptussoftware.com/downloads/repo/euca2ools/$VERSION/yum/centos/
enabled=1
Anschließend können die Euca2ools installiert werden.
yum install euca2ools.$ARCH --nogpgcheck
Dabei handelt es sich bei $ARCH um i386 oder x86_64 und $VERSION entweder um 1.1 oder 1.2.
Tarball
Für die Tarball Variante muss das entsprechende Tarball unter http://open.eucalyptus.com/downloads heruntergeladen werden. Anschließend wird es in ein temporäres Verzeichnis entpackt und Python 2.5 sowie die Euca2ools installiert.
tar zxvf euca2ools-$VERSION-*.tar.gz
cd euca2ools-$VERSION-*
sudo -s
yum install -y swig
rpm -Uvh python25-2.5.1-bashton1.x86_64.rpm python25-libs-2.5.1-bashton1.x86_64.rpm euca2ools-$VERSION-*.x86_64.rpm
Für 32-Bit Rechner muss x86_64 durch i386 ersetzt werden.
Wichtig: Bitte anstatt “-i” die Parameter “-Uvh” verwenden!
Installation mit OpenSUSE 11
Dieses Vorgehen beschreibt die Installation der Euca2ools für OpenSUSE 11. Dazu muss zunächst der Wert der Variablen $VERSION wie folgt auf 1.2 gesetzt werden.
export VERSION=1.2
Es gibt 2 Möglichkeiten, um die Pakete zu erhalten:
Zipper
Die Packages sind in diesem Fall über das Zipper Repository erhältlich.
zypper ar --refresh http://www.eucalyptussoftware.com/downloads/repo/euca2ools/$VERSION/yum/opensuse Euca2ools
Die Packages aus diesem Repository müssen an dieser Stelle als vertrauensvoll eingestuft und bestätigt werden.
zypper refresh Euca2ools
Nun kann die Installation erfolgen.
zypper install euca2ools
Tarball
Für die Tarball Variante muss das entsprechende Tarball unter http://open.eucalyptus.com/downloads heruntergeladen werden. Anschließend wird es in ein temporäres Verzeichnis entpackt und die Euca2ools installiert.
tar zxvf euca2ools-$VERSION-*.tar.gz
cd euca2ools-$VERSION-*
sudo -s
zypper install swig
rpm -Uvh euca2ools-$VERSION-*.x86_64.rpm
Wichtig: Bitte anstatt “-i” die Parameter “-Uvh” verwenden!
Installation mit Ubuntu Jaunty
Die Euca2ools 1.1 können auf Ubuntu Jaunty mittels der DEB Packages installiert werden. Dazu müssen in der “/etc/apt/sources.list” folgende Zeilen für den Zugriff auf den Repository eingefügt werden.
deb http://www.eucalyptussoftware.com/downloads/repo/euca2ools/1.1/ubuntu jaunty universe
Anschließend kann die Installation erfolgen.
apt-get update
apt-get install euca2ools
Die folgende Warnmeldung muss mit einem “Y” bestätigt werden.
WARNING: The following packages cannot be authenticated!
...
Install these packages without verification [y/N]? y
Wenn die Eucalyptus Packages in Zukunft nicht mehr automatisch aktualisiert werden sollen, muss der Eintrag aus der sources.list wieder entfernt werden.
Installation mit Debian Squeeze
Die Euca2ools können auf Debian squeeze mittels der DEB Packages installiert werden. Dazu müssen in der “/etc/apt/sources.list” folgende Zeilen für den Zugriff auf den Repository eingefügt werden.
1.1
deb http://www.eucalyptussoftware.com/downloads/repo/euca2ools/1.1/debian squeeze contrib
1.2
deb http://www.eucalyptussoftware.com/downloads/repo/euca2ools/1.2/debian squeeze main
Anschließend kann die Installation erfolgen.
apt-get update
apt-get install euca2ools python-boto=1.8d-1
Die folgende Warnmeldung muss mit einem “Y” bestätigt werden.
WARNING: The following packages cannot be authenticated!
...
Install these packages without verification [y/N]? y
Wenn die Eucalyptus Packages in Zukunft nicht mehr automatisch aktualisiert werden sollen, muss der Eintrag aus der sources.list wieder entfernt werden.
Funktionen & Nutzung
Die Euca2ools verwenden kryptografische Anmeldeinformationen für die Authentifizierung. Dabei werden zwei Arten von Anmeldeinformationen von EC2-und S3-kompatiblen Diensten ausgestellt: x509 Zertifikate und Schlüssel.
Während einige Befehle nur den Schlüssel benötigen, ist es am besten immer beide Arten von Anmeldeinformationen anzugeben. Weiterhin müssen die URLs zu den EC2 und S3 Services angegeben werden, es sei denn die Web-Services befinden sich auf dem Localhost.
Die Anmeldeinformationen und URLs können mittels der Optionen über die Kommandozeile oder durch das Setzen von Umgebungsvariablen wie folgt angegeben werden.
EC2_URL | -U oder –url [url] | http://host:8773/services/Eucalyptus oder http://ec2.amazonaws.com oder https://ec2.amazonaws.com:443 |
S3_URL | -U oder –url [url] | http://host:8773/services/Walrus oder http://s3.amazonaws.com oder https://s3.amazonaws.com:443 |
EC2_ACCESS_KEY | -a oder –access-key [key] | Access Key ID / Query ID |
EC2_SECRET_KEY | -s oder –secret-key [key] | Secret Access Key / Secret Key |
EC2_CERT | -c oder –cert [file] | PEM-encoded Zertifikat des Benutzer |
EC2_PRIVATE_KEY | -k oder –privatekey [file] | PEM-encoded Private Key des Benutzer |
EUCALYPTUS_CERT | –ec2cert_path [file] | OPTIONALER Pfad zum Cloud Zertifikat |
Werden die Euca2ools zusammen mit Eucalyptus verwendet, sollte es ausreichen, die Datei eucarc in die Umgebungsvariablen einzubinden, um alle die oben genannten Variablen korrekt einzurichten.
Mittels euca- plus Name des Befehls –help erhält man die Ausgabe der Hilfe. Mit man Name des Befehls öffnet sich die entsprechende Manpage.
Image Management
Um Instanzen auf Basis von Images auszuführen, müssen diese zunächst zusammengestellt, in die Cloud hochgeladen und anschließend für die Cloud registriert werden. Dieses Vorgehen wird in dem folgenden Abschnitt beschrieben.
Zusammenstellen von Images
Wichtig! Die eucarc Konfigurationsdatei muss sich für die nachfolgenden Schritte in den Umgebungsvariablen befinden.
Der Befehl “euca-bundle-image” kann verwendet werden, um Images zusammenzustellen, die für Eucalyptus als auch Amazon benutzt werden können. So ein Image besteht aus einer Manifest Datei und mehreren Einzeteilen.
Um ein Image mit dem Dateinamen “image.img” für den Benutzer mit der ID “123456789111” in dem Verzeichnis “image-dir” zusammenzustellen benutzen wir folgenden Befehl.
euca-bundle-image -i image.img -u 12345678111 -d image-dir
Um Anmeldeinformationen (Benutzerzertifikat: “cert-xyz.pem” und Private Key: “pk-xyz.pem”) gesondert anzugeben erweitern wir den obigen Befehl.
euca-bundle-image -i image.img -u 123456789111 -d image-dir -c cert-xyz.pem -k pk-xyz.pem
Um ein Image für den Einsatz in der Amazon Cloud zusammenzustellen, muss das Amazon EC2 Zertifikat (dies ist Teil der EC2 AMI Tools) vorhanden sein. Das Zertifikat befindet sich in der Regel unter “$EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2.pem”.
euca-bundle-image -i image.img -u 123456789111 -d image-dir -c cert-abc.pem -k pk-abc.pem --ec2cert $EC2_AMITOOL_HOME/etc/ec2/amitools/cert-ec2.pem
In dem obigen Beispiel muss weiterhin darauf geachtet werden, dass es sich bei den Anmeldeinformationen “cert-abc.pem” and “pk-abc.pem” um die von Amazon und nicht die von Eucalyptus handelt.
Weitere Optionen können mittels –help oder man euca-bundle-image aufgerufen werden.
euca-bundle-image --help
Hochladen von Images
Um ein Image in einem Schritt zusammenzustellen (euca-bundle-image) und hochzuladen kann der Befehl “euca-upload-bundle” verwendet werden.
Um ein fertig zusammengestelltes Image, welches sich auf die Manifest Datei “image.img.manifest.xml” bezieht und in den Bucket “image-bucket” hochgeladen werden soll, gehen wir wie folgt vor.
euca-upload-bundle -b image-bucket -m image.img.manifest.xml
Weitere Optionen können mittels –help oder man euca-upload-bundle aufgerufen werden.
euca-upload-bundle --help
Registrieren von Images
Zusammengestellte und in die Cloud hochgeladene Images müssen anschließend registiert werden, damit sie auch gestartet werden können.
Um ein fertig zusammengestelltes Image, welches sich auf die Manifest Datei “image.img.manifest.xml” bezieht, in den Bucket “image-bucket” hochgeladen wurde und nun registriert werden soll, verwenden wir den Befehl.
euca-register image-bucket/image.img.manifest.xml
Weitere Optionen können mittels –help oder man euca-register aufgerufen werden.
euca-register --help
Herunterladen von Images
Images können ebenfalls von der Cloud heruntergeladen bzw. vollständig entfernt werden.
Um ein Image, welches in den Bucket “image-bucket” hochgeladen wurde, kann mit dem folgenden Befehl aus der Cloud heruntergeladen werden.
euca-download-bundle -b image-bucket
Weitere Optionen können mittels –help oder man euca-download-bundle aufgerufen werden.
euca-download-bundle --help
Löschen von Images
Mit dem Befehl “euca-delete-bundle” können Images wieder entfernt werden.
Um ein Image aus dem Bucket “image-bucket” zu löschen verwenden wir den Befehl.
euca-delete-bundle -b image-bucket
Um ein bestimmtes Image zu entfernen, kann eine Manifest Datei mit den Parametern “-m” oder “–manifest” angegeben werden.
Im folgenden löschen wir den Bucket “image-bucket”, nachdem des Image entfernt wurde.
euca-delete-bundle -b image-bucket --clear
Wichtig! Ein Bucket kann erst gelöscht werden, wenn er leer ist.
Weitere Optionen können mittels –help oder man euca-delete-bundle aufgerufen werden.
euca-delete-bundle --help
“Entflechten” von Images
Um ein Image wieder zu “entflechten” nutzen wir den Befehl “euca-unbundle”.
Ein zusammengestelltes Image, welches sich im Verzeichnis “image-dir” befindet und sich auf die Manifest Datei “image.img.manifest.xml” bezieht, entflechten wir mit dem folgenden Befehl.
euca-unbundle -m image.img.manifest.xml -d image-dir
Weitere Optionen können mittels –help oder man euca-unbundle aufgerufen werden.
euca-unbundle --help
Kontrollieren der Virtuellen Maschinen
Innerhalb der Cloud können virtuelle Maschinen (VM) Instanzen kontrolliert werden, indem hochgeladene Images als Templates verwendet werden. Mit den folgenden Befehlen können virtuelle Maschinen Instanzen kontrolliert werden.
Anzeigen aktuell ausgeführter Instanzen
Mittels “euca-describe-instances” wird eine Liste aktuelle ausgeführter Instanzen angezeigt.
euca-describe-instances
Um sich Informationen zu einer bestimmten Instanz anzuzeigen, wird dem Befehl “euca-describe-instances” als Parameter zusätzlich die ID der Instanz mit übergeben.
euca-describe-instances i-43035890
Weitere Informationen erhält man mit dem Parameter “–help”.
euca-describe-instances --help
Ausführen von Instanzen
Mit dem Befehl “euca-run-instances” können VM Instanzen von Images deployed werden, welche zuvor in die Cloud hochgeladen wurden.
Um z.B. eine Instanz von dem Image mit der ID “emi-53444344”, dem Kernel “eki-34323333”, der Ramdisk “eri-33344234” und dem Keypair “testkey” auszuführen kann der folgende Befehl verwendet werden.
euca-run-instances -k testkey --kernel eki-34323333 --ramdisk eri-33344234 emi-53444344
Um mehrere Instanzen auszuführen kann der Parameter “-n” oder “–instance-count” genutzt werden.
Weitere Informationen erhält man mit dem Parameter “–help” oder mittels der Manpage von “euca-run-instances”.
euca-run-instances --help
Herunterfahren von Instanzen
Mit dem Befehl “euca-terminate-instances” können Instanzen wieder heruntergefahren werden. Um z.B. die Instanz “i-34523332” zu beenden verwenden wir.
euca-terminate-instance i-34523332
Weitere Informationen erhält man mit dem Parameter “–help” oder mittels der Manpage von “eeuca-terminate-instances”.
euca-terminate-instances --help
Neustart von Instanzen
Für einen Neustart einer Instanz wird der Befehl “euca-reboot-instances” benötigt. Um z.B. die Instanz “i-34523332” neu zu starten verwenden wir.
euca-reboot-instances i-34523332
Während eines Neustarts bleibt das Root Dateisystem der Instanz erhalten.
Netzwerk und Sicherheit
Weiterhin können Instanzen dynamisch IP-Adressen zugewiesen und entfernt werden, sowie Security Groups erstellt und ihnen netzwerkbasierte Regeln zugeteilt werden.
Zuweisen und Verbinden von IP-Adressen
Mit den Befehlen “euca-allocate-address” und “euca-associate-address” können IP-Adressen zugewiesen (allocate) und öffentliche IP-Adressen mit Instanzen verbunden (associate) werden.
Im folgenden Beispiel wird eine IP-Adresse zugewiesen und mit der Instanz “i-56785678” verbunden.
euca-allocate-addressADDRESS a.b.c.d
euca-associate-address -i i-56785678 a.b.c.d
Lösen und Freigeben von IP-Adressen
Mittels “euca-disassociate-address” und “euca-release-address” können IP-Adressen von einer Instanz gelöst und für den globalen IP-Adressen Pool wieder freigegeben werden.
In dem folgenden Beispiel wird die IP-Adresse “a.b.c.d” gelöst und freigegeben.
euca-disassociate-address a.b.c.d
euca-release-address a.b.c.d
Erstellen von Security Groups
Security Groups werden mit dem Befehl “euca-add-group” erstellt.
Das folgende Beispiel erstellt eine Security Group mit dem Namen “mygroup”
euca-add-group -d "mygroup description" mygroup
Security Groups können ebenfalls beim Start einer Instanz erstellt werden, indem der Parameter “-g” zu dem Befehl “euca-run-instances” hinzugefügt wird.
Netzwerkbasierte Regeln einer Security Group hinzufügen
Standardmäßig verbietet eine Security Group jeglichen eingehenden Datenverkehr aus allen Quellen. Mit dem Befehl “euca-authorize” können einer Security Group netzwerkbasierte Regeln hinzugefügt werden.
Mittels “–help” erhält man eine Liste aller möglichen Optionen die verwendet werden können.
euca-authorize --help
Um z.B. eingehende SSH (Port 22) Verbindungen für die Security Group “mygroup” zu erlauben, wird der nachfolgende Befehl verwendet. Hier wird für das TCP Protokoll, dem Port 22 und dem CIDR Quell-Netzwerk 0.0.0.0/0 (dieses bezieht sich auf jede Quelle) eine Regel erstellt. Das bedeutet, dass anschließend eine SSH-Verbindung über das TCP Protokoll von jedem Quell-Netzwerk aus aufgebaut werden darf.
euca-authorize -P tcp -p 22 -s 0.0.0.0/0 mygroup
Anstatt eine bestimmte CIDR Quelle anzugeben, kann dafür ebenfalls eine andere Security Group verwendet werden, in der weitere Regeln vorhanden sind.
euca-authorize --source-group someothergroup --source-group-user someotheruser -P tcp -p 22 mygroup
Entfernen der Regeln von einer Security Group
Mit dem Befehl “euca-revoke” werden die zuvor zugewiesenen Regeln einer Security Group wieder entzogen.
euca-revoke -P tcp -p 22 -s 0.0.0.0/0 mygroup
Mittels “–help” können weitere Optionen angezeigt werden.
euca-revoke --help
Löschen einer Security Group
Mit dem Befehl “euca-delete-group” kann eine Security Group wieder entfernt werden.
Mit dem folgenden Kommando wird die Security Group “mygroup” wieder gelöscht.
euca-delete-group mygroup
Verwenden von Block Storage
Mit den Euca2ools können weiterhin Dynamic Block Volumes erstellt, Volumes zu Instanzen hinzugefügt, Volumes entfernt und gelöscht werden, sowie Snapshots von Volumes erstellt und aus Snapshots Volumes erstellt werden.
Bei Volumes handelt es sich um Raw Block Devices. Auf einem zu einer Instanz hinzugefügten Volume kann ein Dateisystem erstellt werden. Anschließend kann das Volume innerhalb der VM Instanz gemounted werden und wie ein gewöhnliches Block Device verwendet werden. Es können ebenfalls ad-hoc Snapshots von Volumes erstellt und aus diesen Snapshots wiederum neue Volumes erstellt werden.
Erstellen eines Volume
Für das Erstellen eines Dynamic Block Volume wird der Befehl “euca-create-volume” benötigt.
Um z.B. ein Volume mit der Größe von 1 Gigabyte in der Verfügbarkeitszone “myzone” zu erstellen wird das folgende Kommando benötigt.
euca-create-volume --size 1 -z myzone
Zum Anzeigen aller Verfügbarkeitszonen wird der Befehl “euca-describe-availability-zones” benötigt.
Um aus dem vorhandenen Snapshot “snap-33453345” in der Verfügbarkeitszone “myzone” ein Volume zu erstellen wird das folgende Kommando benötigt.
euca-create-volume --snapshot snap-33453345 -z myzone
Weitere Informationen erhält man mit dem Parameter “–help”.
euca-create-volume --help
Ein Volume zu einer Instanz hinzufügen
Mit dem Befehl “euca-attach-volume” können Volumes zu einer Instanz hinzugefügt werden. Dazu muss der lokale Name des Block Device und die Instanz-ID angegeben werden.
Um das Volume “vol-33534456” der Instanz “i-99838888” zu dem lokalen Device “/dev/sdb” (der Instanz) hinzuzufügen wird das folgende Kommando benötigt.
euca-attach-volume -i i-99838888 -d /dev/sdb vol-33534456
Dabei kann ein Volume zu einem Zeitpunkt nur genau einer Instanz zugewiesen werden.
Entfernen eines Volume
Der Befehl “euca-detach-volume” wird benötigt, um ein zuvor hinzugefügtes Volume wieder zu entfernen.
Um z.B. das Volume “vol-33534456” wieder zu entfernen nutzen wir das folgende Kommando.
euca-detach-volume vol-33534456
Bevor eine Instanz beendet oder ein Volume gelöscht wird, muss ein hinzugefügtes Volume zunächst entfernt werden. Sollte das Entfernen eines Volumes nicht möglich sein (Fehlermeldung), liegt es wahrscheinlich daran, dass sich dieses derzeit in einem inkonsistenten Zustand befindet. Ein abruptes entfernen würde zu einem Datenverlust führen.
Löschen eines Volume
Für das Löschen eines Volumes wird der Befehl “euca-delete-volume” benötigt.
Um z.B. das Volume “vol-33534456” zu löschen, nutzen wird das folgende Kommando.
euca-delete-volume vol-33534456
Dabei dürfen nur Volumes gelöscht werden, die zu diesem Zeitpunkt keiner Instanz hinzugefügt sind.
Erstellen eines Snapshot
Es können ebenfalls live Snapshots von Volumes mit dem Befehl “euca-create-snapshot” erstellt werden.
Um z.B. einen Snapshot von dem Volume “vol-33534456” zu erstellen wird das folgende Kommando benötigt.
euca-create-snapshot vol-33534456
Löschen eines Snapshot
Mit dem Befehl “euca-delete-snapshot” können Snapshots wieder gelöscht werden.
Um z.B. den Snapshot “snap-33453345” zu löschen nutzen wir das folgende Kommando.
euca-delete-snapshot snap-33453345