Je veux AWS Lambda avec Python sur Mac!

J'ai entendu dire qu'AWS Lambda prend en charge Python 3.6, j'ai donc décidé d'écrire la fonction Lambda que j'avais écrite dans Node.js en Python, mais Lambda qui inclut des modules écrits en C tels que numpy. Lorsque je déploie une fonction à partir d'un Mac, il est difficile de l'exécuter sur Lambda car elle indique ** "C'est un module conçu pour le Mac, donc il ne peut pas être chargé" **.

J'ai résolu ce problème avec Docker, je vais donc résumer comment le faire.

[Mis à jour le 25 mars 2020] J'ai également écrit sur la création d'une couche Lambda. Créer une couche pour AWS Lambda Python avec Docker-Qiita

Exemple de fonction Lambda que vous souhaitez déployer

Cette fois, envisagez de déployer une fonction Lambda qui ne fait que charger numpy comme ceci:

Structure du répertoire


.
├── main.py
└── requirements.txt

main.py


import numpy

def handler(event, context):
    pass

requirements.txt


numpy

Lorsqu'il est installé normalement sur un Mac

La commande suivante installe numpy dans le même répertoire, mais elle ne fonctionne pas sur Lambda car numpy est une version Mac, même si je la compresse et la déploie.

$ pip install -r requirements.txt -t .

Vous devriez probablement obtenir cette erreur.

Unable to import module 'main':
Importing the multiarray numpy extension module failed. Most likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try `git clean -xdf` (removes all files not under version control). Otherwise reinstall numpy.

Original error was: cannot import name 'multiarray'

Lorsque je recherche la solution sur Google, je n'obtiens qu'une réponse mystérieuse telle que "Lancer une instance Amazon Linux et la construire là-bas". ** Je veux un serveur sans serveur avec AWS Lambda, mais j'ai besoin d'un serveur pour le déploiement ** Comment est-ce? ?? ??

En bref, j'aimerais pouvoir construire dans un environnement Linux. Vous pouvez le faire avec Docker.

Construire sur un conteneur Docker

Pour exécuter la commande ci-dessus sur le conteneur Docker, procédez comme suit.

$ docker run --rm -v $(pwd):/work -w /work python:3.6 pip install -r requirements.txt -t .

Lancez le conteneur depuis l'image Python 3.6 [^ linux], montez le répertoire courant dans le répertoire de travail / work, et installez le package là-bas. Lorsque la construction est terminée, ce conteneur n'est plus nécessaire, j'ai donc ajouté l'option --rm pour le supprimer.

[^ linux]: python: 3.6 L'image est basée sur Debian, donc elle est différente de l'environnement d'exécution Lambda (Amazon Linux), mais elle a été installée numpy-1.13.1-cp36-cp36m-manylinux1_x86_64.whl Donc je pense que Linux va bien. Il peut y avoir des modules défectueux autres que numpy, mais dans ce cas, vous pouvez supprimer l'image Amazon Linux Docker.

Maintenant que vous avez un numpy intégré dans un environnement Linux, vous devriez pouvoir le solidifier et le déployer.

Comment développer

Vous pourriez vous demander: "Une fois que vous avez installé un module pour Linux, vous ne pouvez pas l'exécuter sur votre Mac pendant le développement."

Bien sûr, il ne peut pas fonctionner sur un Mac, mais je pense qu'il est préférable de tout exécuter dans un conteneur Docker lors du développement.

$ docker run --rm -v $(pwd):/work -w /work python:3.6 python -c 'import main; main.handler({}, None)'

Comme ça.

Recommended Posts

Je veux AWS Lambda avec Python sur Mac!
Je veux jouer avec aws avec python
Je veux déboguer avec Python
Je veux utiliser Linux sur mac
Je veux analyser les journaux avec Python
Connectez-vous à s3 avec AWS Lambda Python
Je veux savoir si vous installez Python sur Mac ・ Iroha
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
Je veux utiliser MATLAB feval avec python
Je veux faire un jeu avec Python
Je souhaite utiliser le répertoire temporaire avec Python2
Je veux résoudre APG4b avec Python (chapitre 2)
Je veux écrire dans un fichier avec Python
Je souhaite configurer un environnement de développement GUI avec Python ou Golang sur Mac
Je veux le faire avec Python lambda Django, mais je vais m'arrêter
Je veux tweeter Twitter avec Python, mais j'y suis accro
Je veux gérer l'optimisation avec python et cplex
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
Je veux hériter de l'arrière avec la classe de données python
Je veux travailler avec un robot en python.
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Je veux faire fonctionner un ordinateur quantique avec Python
Je veux lier une variable locale avec lambda
Exécutez Python selon la planification sur AWS Lambda
Je veux faire ○○ avec les Pandas
Notifier HipChat avec AWS Lambda (Python)
Étapes pour installer python3 sur Mac
Mettre à jour Mac Python de 2 à 3
Publié en tant que pièce jointe à Slack sur AWS Lambda (Python)
Je veux pouvoir analyser des données avec Python (partie 3)
[AWS] Que faire lorsque vous souhaitez piper avec Lambda
Je souhaite spécifier une autre version de Python avec pyvenv
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Défi problème 5 avec Python: lambda ... j'ai décidé de copier sans
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux pouvoir analyser des données avec Python (partie 2)
Je veux assister automatiquement à des cours en ligne avec Python + Selenium!
[Python] Je souhaite utiliser l'option -h avec argparse
[Python] Permet d'importer les packages pip3 sur AWS Lambda
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
Je veux détecter des objets avec OpenCV
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Je veux connaître la météo avec LINE bot avec Heroku + Python
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Je veux écrire un blog avec Jupyter Notebook
Je veux sortir le début du mois prochain avec Python
Je veux utiliser jar de python
Je voulais résoudre ABC160 avec Python
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Chase des applications actives sur Mac avec Python
Je veux créer un environnement Python
Je veux installer Python avec PythonAnywhere
Comment effacer Python 2.x sur Mac.
Créer un environnement Python avec Anaconda sur Mac
python sur mac
J'ai essayé d'afficher l'interface graphique sur Mac avec le système X Window
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】