2017-02-23 6 views
1

Ich benutze die Serverless Framework und ich kann nicht scheinen, meine Funktionen so zu verpacken, wie ich will.Serverless Framework mit benutzerdefinierten Verpackung

Mein aktueller Ordner-Verzeichnis sieht wie folgt aus:

service/ 
    serverless.yml 
    function1/ 
    package.json 
    handler.js 
    node_modules/ 
     ... 
    function2/ 
    handler.py 
    requirements.txt 
    venv/ 
     ... 

Ist es möglich, Kirsche wählen, welche Ordner ich in der ZIP-Datei enthalten sein sollen und auch die entsprechenden Zielpfad in der Zip-Datei angeben?

Zum Beispiel möchte ich alles innerhalb function1 Ordner zippen, aber alle von ihnen sollten auf der Stammebene der Zip-Datei sein. Im Moment befinden sich alle generierten Dateien in einem Ordner namens function1 in der Zip-Datei.

Antwort

0

Die Verpackung funktioniert nicht so (docs). Sie können nicht die Dateistruktur angeben, die in der Zip gespeichert wird. Sie können nur angeben, was Sie einschließlich oder in diesem zip auszuschließen.

In der docs Verknüpfung können Sie eine Option zur Verwendung eines Artifact sehen. In diesem Fall könnten Sie Ihren eigenen Code zum Zippen mit genau den gewünschten Regeln entwickeln und eine ZIP-Datei ausgeben, die vom Serverless Framework verwendet werden kann. Es ist möglich, aber ich hoffe, dass Sie das nicht brauchen.

Warum möchten Sie den Inhalt des Ordners "function1" in die Stammebene verschieben? Vielleicht ist Ihre wahre Frage: "Wie kann ich meine Lambda-Funktion referenzieren, die sich in einem anderen Ordner befindet?".

service: test 

functions: 
    func1: 
    handler: function1/handler.func1 
    func2: 
    handler: function1/handler.func2 

Die Syntax ist Ordner/filename.function: Wenn dies der Fall ist, könnten Sie die folgenden in der serverless.yml Datei verwenden. Eine andere Lösung wäre, eine serverless.yml Datei für jeden Ordner zu erstellen. Das Problem bei diesem Ansatz besteht darin, dass Sie von der Funktion 1 aus nicht auf die Funktion 2 zugreifen können.

+0

Ich denke, es ist in Ordnung, wenn es eine Nodejs-Funktion ist, aber was ist mit einer Python-Funktion? Die Lösung, die ich gefunden habe, ist mehr wie ein Hack als eine offizielle Lösung. http://forum.serverless.com/t/aws-python-function-dependencies-load/451/5 – lingxiao

+0

@LingxiaoXia, bei Ihrem Link sagte el0ck, dass Sie das Paket nicht manuell zippen müssen. Der empfohlene Ansatz besteht darin, 64-Bit-Bibliotheken zu installieren (da sie auf einer 64-Bit-Maschine ausgeführt werden) und den os.path-Pfad Ihrer Python-Funktion zu ändern. – Zanon

+0

Ja und ich halte das für einen Hack, weil es eine Codeänderung erfordert. Konfigurationsänderungen sind in Ordnung, aber Codeänderungen scheinen nicht so nachhaltig zu sein. – lingxiao

Verwandte Themen