Wie reduziert man die Größe der AWS Lambda-code, geschrieben in JAVA in Eclipse
Ich bin ein android-Entwickler und erkunden Amazon AWS für meine Zukunft appliaction als backend-option. Ich hatte erkundet verschiedene AWS-services wie dynamoDB, S3, se und cool lambda-Funktion mit JAVA. Bei meinem Lernprojekt habe ich gefunden/bereit einen code für die Erstellung von Miniaturansichten von Bildern für jedes Bild hochgeladen S3-bucket. Ich erfolgreich geschrieben Lambda-code in java in der eclipse-IDE und können hochladen und verwenden Sie es über die AWS-Konsole für den Zweck, der beabsichtigt war.
Meine Sorge ist, dass, wenn ich hochgeladen die JAVA Lambda-code auf AWS scheint es 49 MB groß. Wenn ich Suche aus dem Grund fand ich, dass es viele Gläser verwendet wurden, im Projekt unter AWS-sdk für java. Ist das normal oder kann ich das verringern der Größe der hochgeladenen code jedenfalls. Bitte leite mich, Wie kann ich reduzieren die Größe effizient. Ich habe auch gesehen das node.js Lambda-code für gleiche und in den KBs nur. Vielleicht bbe-ich bin dabei einige falsche Dinge.
Bitte Um Hilfe...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfache Antwort - du machst es richtig und Paket-Größe kann nicht reduziert werden auf eine Größe, vergleichbar mit einem node.js -Anwendung.
Für node.js lambda hat sich amazon AWS SDK Bibliotheken statt, so dass Sie den upload nur Ihren eigenen code und Bibliotheken von Drittanbietern. Aber für java lambda, das AWS SDK muss gepackt werden, die mit der Anwendung.
Aber können Sie reduzieren die Paketgröße, indem gezielt auswählen, welche Bibliotheken zu zählen und ohne unnötige Abhängigkeiten.
Dass eine JAR-Größe von 49 MB scheint ein bisschen groß für mich, je nach, welche Bibliotheken Sie sind inklusive. Wenn Sie inklusive der kompletten AWS-SDK (alle Dienste), so kann dies ein bisschen von der Größe Ihrer Gläser. Ich gehe davon aus, dass Sie Ihren eigenen code und andere Bibliotheken sind Nominale Größe. Wenn Sie mit Maven-dann können Sie nur die Bibliotheken für die Dienste, die Sie benötigen (z.B.: S3) und sparen Sie durch nicht einschließlich die, die Sie nicht tun.
Eine gute Quelle ist die Verwalten von Abhängigkeiten mit dem AWS SDK für Java - Bill of Materials Modul (BOM) blog-post. Zwar ist es technisch über ein etwas anderes Thema, es zeigt die best-practice-rund um Paket-management für AWS-SDK in Java. Indem Sie das Paket
aws-java-sdk-s3
stattaws-java-sdk
als ein Beispiel werden Sie sehen eine deutliche Reduzierung der Packungsgröße, AWS hat eine Vielzahl von Dienstleistungen und Ihre volle SDK ist ziemlich groß.Was sehe ich bei vielen meiner Java-basierten Lambda-Funktionen ist ein Bereitstellung-Größe von 10 MB 13 MB, je nach dem, was andere 3rd-party-Bibliotheken, die ich brauche zu gehören. Sie können nicht auf jeden Fall Holen Sie sich die deployment-Größe überall in der Nähe, was node.js ist nur auf der Grundlage der Art und Weise, wie die Java-Implementierung funktioniert, aber es sollte verbessert werden, von wo Sie sich befinden.
Vielleicht möchten Sie erwägen Blick auf proguard ein open-source-jar-shrinker /optimizer. Ich habe festgestellt, es hat mir geholfen, zu reduzieren lambda-Funktionen aus 15 MB zu 3 MB. Ich kann wahrscheinlich erhalten niedrigere als die mit vorsichtiger Verwendung des proguard-Optionen, aber ich bin glücklich genug mit, dass das speichern jetzt.
Meine SBT-basierte Einstellungen für ein Scala lambda-Funktionen sind wie folgt - aber man sollte, denke ich, um ähnliche Kürzungen für eine Java-lambda-Funktion.
Mein erstes Java Lambda-Funktionen waren auch ziemlich groß. Mein HelloWorld Java-Funktion war 10+ MB! Wenn Sie die folgende Java-Funktion deployment tutorial auf der AWS-website, bekommen Sie den Eindruck, dass es notwendig ist, um Paket-das AWS-sdk. Das ist es nicht.
Habe ich getestet und kam zu dem Schluss, dass itsn nicht notwendig Paket der AWS-sdk ausführen, um eine Lambda-Funktion. Wenn Sie mit Maven können Sie die AWS-sdk zur Verfügung gestellt, von:
Wenn Sie Paket, Sie funktionieren in einem GLAS, ist das Ergebnis eine Funktion von ein paar KB ' s.
Screenshot von der AWS Lambda-Konsole