Ich habe in den letzten 3 Monaten an diesem Problem gearbeitet und bin völlig festgefahren.Wie kann ich SoX-Binärdateien mit MP3-Unterstützung für eine NodeJS AWS Lambda-Funktion mit Einschränkungen von AWS Linux AMI kombinieren?
Ich versuche, meine NodeJS AWS Lambda-Funktion, die SoX und seine Abhängigkeiten zu Audiodateien in MP3 konvertieren wird. Ich kann meinen Code dazu bringen, den benutzerdefinierten Speicherort der SoX-Binärdatei zu erkennen, indem ich den Anweisungen here und here folge. Ich habe diesen Code am Anfang meines Lambda-Funktionsaufrufs hinzugefügt, um die Variable process.env PATH so zu aktualisieren, dass sie den Pfad zur benutzerdefinierten Binärdatei enthält.
process.env['PATH'] = process.env['PATH'] + ':'
+ path.join(process.env['LAMBDA_TASK_ROOT'], 'binaries');
Dies führt zu meiner process.env PATH Aktualisierung wie folgt aussehen:
/usr/local/lib64/node-v4.3.x/bin:/usr/local/bin:/usr/bin/:/bin:/var/task/binaries
Welche korrekt aussieht, binaries
ist das Verzeichnis, das die SOx-Binär-I enthält, zusammengestellt.
Da ich NodeJS bin mit, hatte ich das sox-audio NPM-Modul zu ändern, so dass es die aktualisierte process.env Variable für die child_process exec und spawn Anrufe verwendet. Dadurch kann der Code die Binärdatei finden, aber während der Ausführung wird immer noch ein Fehler angezeigt.
Sox process exited with code 127 and signal null
Ich verstehe, dass, obwohl es die SoX binäre finden kann ich eingeschlossen, nicht in der Lage ist ein Befehl mit SoX zu finden, aber ohne weitere Informationen kann ich nicht sagen, was es ist. Ich dachte, es liegt daran, dass ich nicht sicher bin, ob alle Dateien für die Binärdatei enthalten sind.
In einem Versuch, einen sauberen kompilierten Build von SoX mit MP3-Unterstützung zu machen, erstellte ich eine neue EC2-Linux-Instanz und folgte dann den Anweisungen here.
Ich ging Zeile für Zeile, um sicherzustellen, dass ich es funktionierte, und nach der Installation ein paar Abhängigkeiten zum Compilieren aktivieren (wie developer tools), und durch den Export des Build PATH mit export PATH=$PATH:/usr/local/bin
konnte ich einen vollständigen Build mit installiert bekommen MP3-Unterstützung. Ich habe es getestet und es funktioniert genau so, wie ich es brauche.
Da AWS Lambda-Funktionen auf der gleichen abgespeckten Version von Linux (Amazon Linux AMI) wie AWS EC2-Instanzen laufen, könnte ich theoretisch, wenn ich den SoX-Build exportieren und in mein Lambda-Paket aufnehmen könnte Mach es zur Arbeit.
Das ist, wo ich Probleme habe. Was macht das gebaute selbst aus? Es gibt eine ausführbare SoX-Linux-Datei in /usr/local/bin
, die eine einzelne Datei ist, aber es gibt auch eine Tonne mehr Dateien, die alle damit verbunden sind, SoX und seine Abhängigkeiten funktionieren zu lassen. Hier ist eine Liste von Dateien innerhalb /usr/local/bin
auf dem Arbeitsbuild, das ich habe.
Ich habe versucht, all diese Dateien per FTP zu exportieren und sie dann in einer anderen saubere EC2-Instanz importieren, aber auch nach export PATH=$PATH:/usr/local/bin
SoX laufen würde scheitern, weil ein Abhängigkeitsproblem laufen. Es ist klar, dass das einfache Exportieren dieser Dateien nicht ausreicht.
- Wie exportiere ich und was exportiere ich meine Arbeits Build von SoX mit MP3-Unterstützung aus der EC2-Instanz und umfassen nehmen es in meiner AWS Lambda-Funktion zu arbeiten?
- Ist die lange Liste der installierten Abhängigkeiten, damit MP3 funktioniert, unmöglich?
- Gibt es Dateien in mehr als nur dem
/usr/local/bin
Verzeichnis, das ich aufnehmen muss?
Ich weiß wirklich nicht wo sonst noch zu gehen. Bitte helfen :(