7
votes

Comment importer une couche lambda Python?

J'ai un fichier avec ceci comme contenu.

def print_hello_world():
    print ('Hello World')

Il est compressé dans un dossier contenant un fichier __init__.py .

J'ajoute ceci en tant que couche et définit le temps d'exécution correct de python3.6.

Comment l'importer dans ma fonction lambda via le code lambda?

Edit: Après avoir recherché, j'ai trouvé que lambda monte les couches sur / opt et si vous ajoutez / choisissez votre syspath via sys.path.insert (0, '/ opt'), vous pouvez importer vos couches.

Vous pouvez voir vos calques sur: print (os.listdir ("/ opt"))

Il doit y avoir une manière plus élégante de faire ça!


4 commentaires

Vérifiez ici et ici .


J'ai vu les deux. Les documents AWS sont basés à 100% sur le cli. L'article était tout simplement faux (pour le dire sans ambages).


J'utilise cloudformation. J'ai trouvé que l'ajout de sys.path.insert (0, '/ opt') me permet d'importer mes calques. Après avoir identifié l'emplacement de mon calque avec print (os.listdir ("/ opt")).


Il doit y avoir un meilleur moyen, non?


3 Réponses :


6
votes

J'ai donc récemment rencontré ce problème et je pense avoir trouvé un moyen plus propre d'importer vos calques.

Tout d'abord pour la structure du fichier zip que vous téléchargez:

  • Vous n'avez pas besoin d'un fichier __init__.py
  • Mettez tous les scripts que vous souhaitez importer dans un nom de dossier python
  • Compressez ce dossier python (choisissez le nom de votre choix) et téléchargez-le sur votre couche
  • Une fois téléchargé, et la couche a été configurée dans votre fonction lambda, vous pouvez simplement l'utiliser avec import {filename}

Donc, si votre script dans le dossier python s'appelait quelque chose comme custom_helper.py , importez-le dans votre lambda avec import custom_helper .

Je ne sais pas si cela est la manière propre à le faire, mais il semble assez simple pour commencer.


0 commentaires

3
votes

Votre fichier zip doit avoir la structure suivante:

python / lib / python3.7 / site-packages

Autrement dit, il a besoin d'un dossier nommé Python, et dans ce dossier nommé lib, et dans ce dossier nommé python3.7, et dans ce dossier nommé site-packages. Tout ce qui se trouve dans ce dossier sera disponible pour l'importation.

(Si vous utilisez une autre version de Python, cette version devrait être dans le chemin au lieu de 3.7)


0 commentaires

1
votes

Tu devras:

  1. Créez votre couche lambda à l'aide de Docker: sudo docker run -v "$PWD":/var/task "lambci/lambda:build-${penv}" /bin/sh -c "pip install -r requirements.txt -t python/lib/${penv}/site-packages/; exit"
  2. Télécharger la couche sur AWS
  3. Ajoutez une couche à votre lambda
  4. Modity sys.path dans votre Lambda avant l'importation
    import sys; 
    sys.path.append('/opt/python/lib/python3.7/site-packages');
    import apsw
    print(apsw.__file__)

/opt/python/lib/python3.7/site-packages/apsw.cpython-37m-x86_64-linux-gnu.so


0 commentaires