2016-04-12 10 views
2

Ich versuche, die Verwendung des webp Format mit ELB zu unterstützen, aber es ist nicht wie erwartet funktioniert ...WebP Unterstützung mit AWS ElasticBeanstalk

ich eine .config-Datei in .ebextensions mit diesem erstellt:

commands: 
01-command: 
    command: wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.5.0.tar.gz 

02-command: 
    command: tar xvzf libwebp-0.5.0.tar.gz 

03-command: 
    command: cd libwebp-0.5.0 

04-command: 
    command: ./configure 

05-command: 
    command: make 

06-command: 
    command: sudo make install 

Aber wenn Entfalten habe ich diesen Fehler:

ERROR: Command failed on instance. Return code: 127 Output: /bin/sh: ./configure: No such file or directory.

Bin ich etwas falsch? (Umgebung: 64bit Amazon Linux 2015.09 v2.0.6 mit PHP 5.6)

Antwort

2

Sie müssen die Installation nach der Bereitstellung ausführen. AWS hat nicht wirklich dokumentiert, wie man Befehle ausführt Beitrag Bereitstellung, also werde ich es hier tun.

Wie ich bereits erwähnt habe, hat AWS nicht wirklich dokumentiert, dass Sie tatsächlich Skripts auf ElasticBeanstalk nach der Bereitstellung ausführen können. Wenn Sie einen Blick in die Datei eb-commandprocessor.log werfen, sehen Sie, dass eb nach AppDeployPreHook (4 von 6) und AppDeployPostHook (1 von 2) sucht. Es wird wie folgt aussehen:

[2016-04-13T14:15:22.955Z] DEBUG [8851] : Loaded 6 actions for stage 0.<br> 
[2016-04-13T14:15:22.955Z] INFO [8851] : Running 1 of 6 actions: InfraWriteConfig...<br> 
[2016-04-13T14:15:22.962Z] INFO [8851] : Running 2 of 6 actions: DownloadSourceBundle...<br> 
[2016-04-13T14:15:23.606Z] INFO [8851] : Running 3 of 6 actions: EbExtensionPreBuild...<br> 
[2016-04-13T14:15:24.229Z] INFO [8851] : Running 4 of 6 actions: AppDeployPreHook...<br> 
[2016-04-13T14:15:28.469Z] INFO [8851] : Running 5 of 6 actions: EbExtensionPostBuild...<br> 
[2016-04-13T14:15:28.970Z] INFO [8851] : Running 6 of 6 actions: InfraCleanEbextension...<br> 
[2016-04-13T14:15:28.974Z] INFO [8851] : Running stage 1 of command CMD-AppDeploy...<br> 
[2016-04-13T14:15:28.974Z] DEBUG [8851] : Loaded 2 actions for stage 1.<br> 
[2016-04-13T14:15:28.974Z] INFO [8851] : Running 1 of 2 actions: AppDeployEnactHook...<br> 
[2016-04-13T14:15:29.600Z] INFO [8851] : Running 2 of 2 actions: AppDeployPostHook...<br> 
[2016-04-13T14:16:42.048Z] INFO [8851] : Running AddonsAfter for command CMD-AppDeploy... <br> 


Das kleine „AppDeployPostHook“ sagt uns, dass es auf der Suche nach Scripts nach der Bereitstellung auszuführen. Sie finden die eb deployment scripts im Verzeichnis /opt/elasticbeanstalk auf dem Server, und wenn Sie ssh in und ls in diesem Verzeichnis finden, finden Sie hooks, was wir suchen, und wenn Sie cd hooks finden Sie die appdeploy Verzeichnis, cd appdeploy und dann ls und Sie erhalten zwei Verzeichnisse vor und enact. Das klingt banal, ist aber wirklich großartig, weil wir jetzt wissen, wo eb nach Scripts sucht, die es gerade ausführt. Da die AppDeployPreHook-Skripte aus dem Verzeichnis "pre" ausgeführt werden, wissen wir, dass wir ein "post" -Verzeichnis benötigen, um einen Befehl nach der Bereitstellung mit dem AppDeployPostHook auszuführen, das eb ausgeführt wird. Jetzt, wo wir wissen, was zu tun ist, können wir anfangen, unsere Befehle zu schreiben. mit dem Befehl mkdir

  1. create_post_dir Erster Schritt ist zu gehen, um tatsächlich das „post“ Verzeichnis auf dem Server zu erstellen. mkdir "/opt/elasticbeanstalk/hooks/appdeploy/post" wird das für uns tun, also werden wir das als Befehl erstellen.
  2. Dateien Die Dateikonfiguration ermöglicht es uns, eine Datei in einem Verzeichnis über ElasticBeanstalk zu erstellen. Ziemlich bequem für unsere Zwecke! Die erste Zeile der Dateiaktion gibt uns den Namen der zu erstellenden Datei. Wir erstellen ein Shell-Skript, um Befehle auszuführen, und Sie können es wie gewünscht aufrufen, aber ich würde mit 99 beginnen und weitergehen. Wir rufen dieses Shell-Skript auf, das wir erstellen "99_install_libwebp.sh".
  3. Dateieinstellungen Die nächsten drei Zeilen legen die Dateieinstellungen fest. Stellen Sie sicher, dass root sie besitzt und dass dort 000755'd.
  4. Datei Inhalt Dies ist der Inhalt der Datei, die wir erstellen. Geradeaus. Setzen Sie Ihr Shell-Skript ein und Sie können loslegen.
  5. Ladeumgebung vars Wir entschieden uns, die eb-Umgebungsvariablen zu laden, damit unser Skript wissen kann, wo sich die aktuelle Version der App befindet. Es ist normalerweise in/var/app/current, aber es könnte anderswo sein, abhängig von einer Vielzahl von Faktoren.Wir verwenden die Umgebungsvariablen, um das Leben für uns etwas einfacher zu machen.
  6. Wechseln Sie zu unserem aktuellen App-Verzeichnis Wir werden zu unserem aktuellen App-Verzeichnis wechseln, damit wir tun können, wofür wir hier sind.
  7. Paket erhalten wir wollen Verwendung wget, um die libwebp bekommen wir wollen
  8. Packen Sie das Paket selbsterklärend
  9. Wechseln Sie in das Paketverzeichnis Nun, da wir das Paket entpackt haben, können wir ändern das Paketverzeichnis.
  10. Tun, was wir tun müssen Wir können jetzt unsere ./configure, make und make install ausführen.

Das ist es. Sie können das Stealth-Programm "AppDeployPostHook" verwenden, um so viele Befehle nach der Bereitstellung auszuführen, die Sie benötigen. Sehr nützlich, wenn Sie Pakete installieren, Dienste neu starten oder irgendetwas nach der Bereitstellung tun müssen.

Ich fügte den Code hinzu, den ich zu Github einsetzte, für die einfache Referenz auch. https://github.com/hephalump/testphp

Hinweis: Ich habe dies erfolgreich eine etwas andere Umgebung ausgeführt. Ich habe ElasticBeanstalk verwendet, um eine neue PHP-Anwendung mit der neuesten Umgebungsversion zu implementieren, die PHP 5.6 auf 64bit Amazon Linux 2016.03 v2.1.0; Der Umgebungstyp, den Sie verwenden, war für mich als Option nicht verfügbar ... Eigentlich war dies die einzige Version mit PHP 5.6, die mir zur Verfügung stand, also ging ich damit um.

+0

Arbeitete wie ein Charme. Vielen Dank! –

Verwandte Themen