8

Ich versuche das serverless Framework zu verwenden, um eine AWS Lambda-Funktion zu erstellen und bereitzustellen. Ich habe einen Ordner mit dem Namen vendored im Stammverzeichnis des Projekts erstellt und die Funktionsabhängigkeiten installiert (mit pip install). Jedes Mal, wenn ich versuche, es zu laufen (mit serverless function run) Ich habe einen Fehler:Wie stelle ich eine Funktion in Python mit ihren Abhängigkeiten bereit?

Serverless: Running isNewUser...
Serverless: WARNING: This variable is not defined: region
Serverless: -----------------
Serverless: Failed - This Error Was Returned:
Serverless: {"exception": ["Traceback (most recent call last):\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler\", line 170, in \n handler = import_program_as_module(path)\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler\", line 149, in import_program_as_module\n module = make_module_from_file('lambda_handler', handler_file)\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler\", line 129, in make_module_from_file\n py_source_description\n", " File \"/home/fernando/workspace/os-cac/isNewUser/handler.py\", line 11, in \n from vtex.order import Order\n", "ImportError: No module named vtex.order\n"], "success": false} Serverless: Exception message from Python
Serverless: Traceback (most recent call last): , File "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", line 170, in handler = import_program_as_module(path) , File "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", line 149, in import_program_as_module module = make_module_from_file('lambda_handler', handler_file) , File "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", line 129, in make_module_from_file py_source_description , File "/home/fernando/workspace/os-cac/isNewUser/handler.py", line 11, in from vtex.order import Order ,ImportError: No module named vtex.order `

vtex.order ist ein Modul in handler.py importiert

Die Struktur meines Projektes ist es so etwas wie:

/root/ 
    | 
    |--_meta/ 
    |--vendored/ 
       |--dependencies... 
    |--function-name/ 
        |--handler.py 
        |--event.json 
        |--s-function.json 
    |--requirements.txt 
    |--admin.env 
    |--package.json 
    |--s-project.json 
    |--s-resources-cf.json 
    |--s-project.json 

Gibt es irgendetwas, was ich falsch mache? Sollte ich irgendwie meine Funktion so konfigurieren, dass die Abhängigkeiten von vendored enthalten sind?

Antwort

7

Hier sind ein paar Schritte, die es funktioniert sollte: "handler": "function-name/handler.handler",

  • in handler.py fügen Sie den folgenden: in den Weg der Funktionsname

    1. Achten Sie darauf, dass der Handler Eintrag in s-function.json hat:

      import os 
      import sys 
      
      here = os.path.dirname(os.path.realpath(__file__)) 
      sys.path.append(os.path.join(here, "../vendored")) 
      
      from vtex.order import Order 
      

    das ist es. Lass es mich wissen, wenn es funktioniert.

  • +0

    Dank installiert ist! Es funktionierte! –

    +0

    Aufzählungszeichen # 1 ist, was ich vermisst wurde, danke. – panchicore

    +1

    Beachten Sie, dass die Bibliotheken, die Sie in das Serverless-Paket einbinden, in der AWS Lambda-Umgebung möglicherweise nicht funktionieren. Dies gilt normalerweise nur für nicht-reine Python-Bibliotheken wie Kryptographie, cffi und andere.Wenn Sie darauf stoßen, können Sie entweder Bibliotheken von einer Ressource wie https://github.com/Miserlou/lambda-packages abholen, oder Sie können die Pip-Installationen auf einem Linux-Rechner durchführen, der nah genug an Amazon Linux ist (ich habe es benutzt) Centos 6-x64) und kopieren Sie aus dem Site-Packages-Verzeichnis, das auffüllt. Wenn jemand mehr Details benötigt, antworten Sie hier und ich werde eine Frage und Antwort hinzufügen. –

    3

    I unten Schritte folgen mit Abhängigkeiten zu implementieren:

    • ein Verzeichnis für Abhängigkeiten in Projekt-Stamm mkdir .vendor

    • hinzufügen Abhängigkeiten in requirements.txt Datei manuell oder pip freeze > requirements.txt

    • verwenden Erstellt Update serverless.yml Datei

    package: include: - .vendor/**

    • Fügen .vendor Verzeichnis Systempfad in handler.py Datei

    import sys sys.path.insert(0, './.vendor')

    • Installieren Abhängigkeiten pip install -r requirements.txt -t .vendor

    Jetzt serverless deploy wird fu laden Verbindung mit Abhängigkeiten.

    Verwandte Themen