Ich möchte Lambda mit Python auf Mac AWS!

Ich habe gehört, dass AWS Lambda Python 3.6 unterstützt, daher habe ich beschlossen, die Lambda-Funktion zu schreiben, die ich in Node.js in Python geschrieben habe, aber Lambda, das in C geschriebene Module wie numpy enthält. Wenn ich eine Funktion von einem Mac aus bereitstelle, ist es schwierig, sie auf Lambda auszuführen, da ** "Es ist ein Modul, das für den Mac entwickelt wurde und daher nicht geladen werden kann" **.

Ich habe dieses Problem mit Docker gelöst und werde zusammenfassen, wie es geht.

[Aktualisiert am 25. März 2020] Ich habe auch darüber geschrieben, wie man eine Lambda-Schicht erstellt. Erstellen Sie eine Ebene für AWS Lambda Python mit Docker-Qiita

Beispiel für eine Lambda-Funktion, die Sie bereitstellen möchten

Ziehen Sie dieses Mal in Betracht, eine Lambda-Funktion bereitzustellen, die nichts anderes tut, als numpy wie folgt zu laden:

Verzeichnisaufbau


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

main.py


import numpy

def handler(event, context):
    pass

requirements.txt


numpy

Bei normaler Installation auf einem Mac

Der folgende Befehl installiert numpy im selben Verzeichnis, funktioniert jedoch unter Lambda nicht, da numpy ein Mac-Build ist, selbst wenn ich es komprimiere und bereitstelle.

$ pip install -r requirements.txt -t .

Sie sollten wahrscheinlich diesen Fehler erhalten.

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'

Wenn ich die Lösung google, erhalte ich nur eine mysteriöse Antwort wie "Starten Sie eine Amazon Linux-Instanz und erstellen Sie sie dort". ** Ich möchte mit AWS Lambda ohne Server, benötige jedoch einen Server für die Bereitstellung. ** Wie ist das? ?? ??

Kurz gesagt, ich wünschte, ich könnte in einer Linux-Umgebung bauen. Sie können dies mit Docker tun.

Bauen Sie auf einem Docker-Container auf

Gehen Sie wie folgt vor, um den obigen Befehl für den Docker-Container auszuführen.

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

Starten Sie den Container über das Python 3.6-Image [^ linux], hängen Sie das aktuelle Verzeichnis in das Arbeitsverzeichnis / work ein und installieren Sie das Paket dort. Wenn der Build abgeschlossen ist, wird dieser Container nicht mehr benötigt, daher habe ich die Option "--rm" hinzugefügt, um ihn zu entfernen.

[^ linux]: python: 3.6 Das Image basiert auf Debian, unterscheidet sich also von der Lambda-Ausführungsumgebung (Amazon Linux), wurde jedoch installiert numpy-1.13.1-cp36-cp36m-manylinux1_x86_64.whl Ich denke, Linux ist in Ordnung. Möglicherweise gibt es andere fehlerhafte Module als numpy, aber in diesem Fall können Sie das Amazon Linux Docker-Image löschen.

Nachdem Sie eine Nummer in einer Linux-Umgebung erstellt haben, sollten Sie diese festigen und bereitstellen können.

Wie man sich entwickelt

Sie fragen sich vielleicht: "Sobald Sie das Modul für Linux installiert haben, können Sie es während der Entwicklung nicht mehr auf Ihrem Mac ausführen."

Sicher, es kann nicht auf einem Mac ausgeführt werden, aber ich denke, es ist am besten, alles bei der Entwicklung in einem Docker-Container auszuführen.

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

So was.

Recommended Posts

Ich möchte Lambda mit Python auf Mac AWS!
Ich möchte mit aws mit Python spielen
Ich möchte mit Python debuggen
Ich möchte Linux auf dem Mac verwenden
Ich möchte Protokolle mit Python analysieren
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Ich möchte wissen, ob Sie Python auf Mac ・ Iroha installieren
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
Ich möchte MATLAB feval mit Python verwenden
Ich möchte ein Spiel mit Python machen
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
Ich möchte APG4b mit Python lösen (Kapitel 2)
Ich möchte mit Python in eine Datei schreiben
Ich möchte eine GUI-Entwicklungsumgebung mit Python oder Golang auf dem Mac einrichten
Ich möchte es mit Python Lambda Django machen, aber ich werde aufhören
Ich möchte Twitter mit Python twittern, bin aber süchtig danach
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich möchte mit Python-Datenklasse nach hinten erben
Ich möchte mit einem Roboter in Python arbeiten.
Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
Ich möchte einen Quantencomputer mit Python betreiben
Ich möchte eine lokale Variable mit Lambda binden
Führen Sie Python planmäßig auf AWS Lambda aus
Ich möchte ○○ mit Pandas machen
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Schritte zum Installieren von python3 auf einem Mac
Aktualisieren Sie Mac Python von 2 auf 3
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
Ich möchte Daten mit Python analysieren können (Teil 3)
[AWS] Was tun, wenn Sie mit Lambda pfeifen möchten?
Ich möchte eine andere Version von Python mit pyvenv angeben
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Herausforderung Problem 5 mit Python: Lambda ... Ich habe mich entschieden, ohne zu kopieren
Ich möchte Daten mit Python analysieren können (Teil 4)
Ich möchte Daten mit Python analysieren können (Teil 2)
Ich möchte automatisch an Online-Kursen mit Python + Selen teilnehmen!
[Python] Ich möchte die Option -h mit argparse verwenden
[Python] Ermöglicht den Import von pip3-Paketen in AWS Lambda
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
Ich möchte Objekte mit OpenCV erkennen
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Ich möchte einen Blog mit Jupyter Notebook schreiben
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich möchte ein Glas aus Python verwenden
Ich wollte ABC160 mit Python lösen
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Verfolgen Sie aktive Anwendungen auf einem Mac mit Python
Ich möchte eine Python-Umgebung erstellen
Ich möchte eine Pip-Installation mit PythonAnywhere durchführen
So löschen Sie Python 2.x auf einem Mac.
Erstellen Sie eine Python-Umgebung mit Anaconda auf einem Mac
Python auf Mac
Ich habe versucht, die GUI auf einem Mac mit X Window System anzuzeigen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】