2017-10-22 3 views
0

Ich verwende eine aws-Lambda-Funktion mit Serverless Framework. Mein Problem ist, dass es eine large file (44MB) gibt, die jedes Mal bereitgestellt wird, wenn ich sls deploy -f any_fn mache. Ich hatte ähnliche Probleme, wenn es einen Ordner node_modules gibt (der ziemlich groß sein kann).Wie kann die serverlose Bereitstellung verringert werden?

Gibt es eine Möglichkeit, die Upload-Größe zu reduzieren, indem die gemeinsamen Dateien nur einmal (und für alle Funktionen) hochgeladen werden? Denn im Moment wird die gleiche Binärdatei immer wieder komprimiert, obwohl sie sich nie ändert.

+0

Können Sie uns mehr über Ihre Funktion und ihre Abhängigkeiten erzählen? Es könnte Möglichkeiten geben, seine Größe von dort zu reduzieren. – dashmug

+0

@dashmug Ich habe dieses Problem zweimal, einmal mit diesem Projekt https://github.com/sambaiz/puppeteer-lambda-starter-kit (44MB) und andere Zeit mit diesem Projekt https://github.com/araines konfrontiert/serverless-php (24MB) – supersan

Antwort

2

Es gibt keine Möglichkeit zu tun, was Sie vorschlagen. AWS Lambda erfordert, dass Sie das gesamte Paket mit allen Abhängigkeiten jedes Mal hochladen. Alles muss in der Zip-Datei enthalten sein, die für Lambda bereitgestellt wird.

+0

Ich dachte an einen Weg, brauche aber etwas Input, wenn es machbar ist. Was passiert, wenn ich eine serverlose Proxy-Funktion erzeuge, d. H. Eine lamba-Funktion, die mit serverless erstellt wurde und eine Datei als Eingabeparameter akzeptiert. Diese Funktion kombiniert dann diese Eingabedatei mit den statischen Dateien (aus S3-Bucket) und verwendet dann die API "AWS.Lambda" nodejs, um die Funktion tatsächlich bereitzustellen. Auf diese Weise sende ich nur die Funktion nur die Änderungen, der Rest der Bereitstellung erfolgt über die Proxy-Lambda-Funktion, um meine neue Lambda-Funktion mit den statischen Dateien zu erstellen. Macht das irgendeinen Sinn? Ich weiß, es ist eine Menge Arbeit, aber wird es funktionieren? – supersan

+0

Wenn Sie nur nach etwas suchen, das Ihre Bereitstellungen für Sie verwaltet, sodass Sie die endgültigen Pakete nicht von Ihrem lokalen Computer erstellen und hochladen müssen, können Sie einen Continuous Integration/Continuous Delivery-Dienst wie AWS CodePipeline verwenden. –

+0

vielen Dank dafür .. Ich denke, ich werde beginnen zu erforschen, wie AWS Codepipeline verwenden, um meine Lambda-Funktionen mit all diesen statischen Assets zu AWS Lambda zu implementieren. – supersan

Verwandte Themen