Magento in der Cloud mit Amazon AWS

Seit dem 1. November 2010 bietet Amazon für Neukunden bei seinem Dienst AWS (Amazon Web Services) einige Cloud-Dienste ein Jahr lang kostenlos an. Grund genug mal zu probieren, wie sich Magento 1.4 innerhalb eines SuSE Enterprise Servers denn so in einer Cloud verhält.

Zunächst die notwendigen Schritte um ein neue Maschine innerhalb von Amazon AWS zu installieren.

  1. AWS-Account anlegen: http://www.amazon.com/gp/aws/registration/registration-form.html
  2. Unter Security Credentials einen Access Key anlegen und aktivieren: http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key
  3. Ebenfalls im Bereich Security Credentials ein X.509 Zertifikat erstellen und den privaten Schlüssel (pk-.pem) und das Zertifikat (cert-.pem) herunterladen. Unter Linux oder Mac speichert man die Zertifikate im Benutzer-Verzeichnis ~/.ssh. Unter Windows benutzt man am besten Putty und bindet dort die Zertifikate  ein.
  4. Bei der AWS Management Console anmelden: https://console.aws.amazon.com/
  5. Zum Bereich Amazon EC2 wechseln.
  6. Eine neue Amazon EC2 instance anlegen: Region auf „EU West“ umstellen und auf Launch Instance klicken. Danach kann man eine Amazon Machine Image (AMI) auswählen, also das Betriebssystem des virtuellen Servers. Um den Sever kostenlos nutzen zu können muss man darauf achten, das bei Instance Type „Micro“ eingestellt wird. Die von Amazon vorkonfigurierte Maschine „Ubuntu 10.04 LTS“ geht zum Beispiel nicht. Ich entscheide mich aus der Quick Start Liste für „SUSE Linux Enterprise Server 11 64-bit“ (AMI Id: ami-6e57621a), um ein LAMP mit Apache 2.2, MySQL 5.0 und PHP 5.3 zu erstellen. Achtung: Bei dieser Instanz fallen Kosten an und zwar $0,035 pro Stunde. AWS macht einen Unterschied zwischen Linux/UNIX und SUSE Linux Instanzen. Das ist mir leider auch erst bei der ersten Rechnung aufgefallen. Wer hier also wirklich nichts zahlen will, wählt lieber eine der Basic-Instanzen.
  7. Die folgenden Einstellungsdialoge als Screenshot:
     

  8. Im Bereich Security Group müssen nun noch Freigaben für die Ports 22 und 80 erstellt werden.

Die virtuelle Maschine ist nun konfiguriert und man kann man sich bereits mit dem Server über die Public DNS per SSH verbinden. Hierzu benötigt man die Schlüsseldatei aus Schritt 7:

ssh -i pfad-zum-pk/ec2-keypair root@ec2-xx-xxx-xx-xx.eu-west-1.compute.amazonaws.com

Nun geht es an die SuSE-Konfiguration. Obwohl die Beschreibung der AMI etwas anderes behauptet hat, muss man zunächst alle notwendigen LAMP-Komponenten installieren (http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53482&tstart=0).

zypper in apache2-mod_php5 mysql
chkconfig apache2 on
chkconfig mysql on
service mysql start
service apache2 start

Damit Apache .htaccess Dateien verwendet, muss in der Datei /etc/apache2/default-server.conf der Bereich „Directory“ der Wert von AllowOverride auf All angepasst werden:

<Directory "/srv/www/htdocs">
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs-2.2/mod/core.html#options
# for more information.
Options None
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
AllowOverride All
# Controls who can get stuff from this server.
Order allow,deny
Allow from all
</Directory>

Für Magento müssen noch fehlende Pakete installiert und mod_rewrite aktiviert werden:

zypper in php5-mysql
zypper in php5-mcrypt
zypper in php5-curl
zypper in php5-gd
a2enmod rewrite
rcapache2 restart

Der Webserver ist nun tatsächlich einsatzbereit. Magento wird im Standardverzeichnis /srv/www/htdocs/ installiert. Also Los:

cd /srv/www/htdocs/
wget http://www.magentocommerce.com/downloads/assets/1.4.1.1/magento-1.4.1.1.tar.gz
wget http://www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz
tar -zxf magento-1.4.1.1.tar.gz
tar -zxf magento-sample-data-1.2.0.tar.gz
mv magento-sample-data-1.2.0/media/* magento/media/
mv magento-sample-data-1.2.0/magento_sample_data_for_1.2.0.sql magento/data.sql
mv magento/* magento/.htaccess .
chmod -R o+w media
mysqladmin -u root create magento
mysql -u root magento < data.sql
./pear mage-setup .
./pear install magento-core/Mage_All_Latest-stable
chmod o+w var var/.htaccess app/etc
rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*
rm -rf magento/ magento-sample-data-1.2.0/
rm -rf magento-1.4.1.1.tar.gz magento-sample-data-1.2.0.tar.gz data.sql

Die weitere Installation von Magento erfolgt dann über den normalen Webinstaller. Der erste Eindruck ist für den gewählten Servertyp (Micro) mit 613 MB RAM und 1 CPU Core und ohne Server-Tuning erstaunlich gut. Der Benchmarktest mit ab2 liefert 1,64 Requests pro Sekunde. Kein Weltrekord aber als Ausgangsbasis schon mal nicht schlecht.

ab2 -c 2 -n20 http://46.51.176.105/coalesce-functioning-on-impatience-t-shirt.html: 1.64 Requests per second

Ein weiterer Test mit einem anderen Instanzen-Typ (Large) ergibt 2.76 Requests per second. Mit 7,5 GB Arbeitsspeicher und 4 EC2-Recheneinheiten gibt es nun genügend Reserven, um mit den üblichen Performance-Tunings Magento weiterzubringen. Nach der Installation von APC ergibt der Benchmark 4.93 Requests per second. Wieder zurück zu Micro und mit APC leistet der Server 2.91 Requests per second.

Fazit: Die Installation eines virtuellen Servers in der Amazon Cloud verläuft einfach. Natürlich muss man sich mit den Begriffen und Techniken erst mal beschäftigen und nach einem Tag hat man sicher noch nicht alle Möglichkeiten ergründet. Die eigentliche Konfiguration des LAMPs und der Installation der Anwendungen (hier Magento) unterscheidet sich in keinster Weise von dem vorgehen auf einem Root- oder Managed-Server.

Mit der Performance bin ich noch nicht ganz zufrieden, aber für weitere Optimierung bietet die Cloud noch viele Schrauben zum Drehen. Die Hardware-Frage muss nun nicht mehr zu Beginn eines Projektes beantwortet werden, sondern kann innerhalb von Minuten dem aktuellen Bedarf angepasst werden.

4 Responses to Magento in der Cloud mit Amazon AWS

  1. mogitto sagt:

    hallo

    interessant. kannst du den shop link angeben?

    gruss m

    • Websolutions sagt:

      Ja klar, der Demoshop ist unter http://46.51.176.105/ zu erreichen.

      Update: Nach der ersten Rechnung von AWS musste ich feststellen, dass eine SUSE Linux Instanz nicht in der kostenlosen Nutzung ist. Deshalb habe ich das Testsystem wieder runtergefahren. Wer Interesse an einem Livesystem hat, der kann mich gerne kontaktieren.

  2. Stefan sagt:

    Nette Anleitung, vielen Dank. Dank der wenigen deutschsprachigen Informationen zu Amazon AWS, speziell EC2, dauert es manchmal, bis man Zusammenhänge geordnet hat. Vor allem wenn man nicht topfit in Linux ist. Ich habe nun einmal eine AMI Linux Instance genommen – hier funktioniert zypper aber nicht. Als Linux-Laie bleibe ich also bei Suse.

    Es harkt jedoch trotzdem: PHP Dateien werden als Source ausgegeben, PHP war trotz Installation nicht richtig konfiguriert, und da stecke ich nun fest. Trotz Webmin-Installation kriege ich PHP nicht wirklich zum laufen.

    • Websolutions sagt:

      Was zeigt „a2enmod -l“ an? Ist php5 dabei?

      zypper ist der Paketmanager von SuSE. Bei anderen Linuxen sollte es apt-get sein. Aber die Anleitung ist natürlich schon speziell auf SuSE zugeschnitten.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: