http://qiita.com/tf_qiita/items/90b4ec315d179b5d9b9c
Beachten Sie, dass das obige Problem behoben wurde.
Wenn Sie den EC2-Ausführungsbefehl von Lambda verwenden, führt der Ausführungsbefehl die im Anfangszustand der Instanz festgelegte Version aus, nicht die ausführbare Python-Datei **, die auf der Ziel-EC2-Instanz aktiviert ist. (Für Amazon Linux ist es derzeit 2.7.12)
Geben Sie daher beim Ausführen einer Version von Python, die sich vom Standard unterscheidet, die Ausführungsdatei mit dem vollständigen Pfad im in Lambda beschriebenen Ausführungsbefehl an (siehe unten). Im folgenden Beispiel wird die in pyenv erstellte Umgebung angegeben. Da Lambda als root ausgeführt wird, wird pyenv als root erstellt. Wenn Sie es jedoch direkt angeben und ausführen, sollten Sie einen Benutzer für die Ausführung erstellen.
lambda.py
ssm.send_command(
InstanceIds = instances,
DocumentName = "AWS-RunShellScript",
Parameters = {
"commands": [
"/root/.pyenv/versions/anaconda3-4.4.0/bin/python /work/hoge.py",
],
"executionTimeout": ["3600"]
},
)
In Schritt 1 wird die erforderliche Version (Umgebung) ausgeführt, ohne den Pfad der auszuführenden Python zur Umgebungsvariablen hinzuzufügen, sodass die Bibliothek nicht so importiert werden kann, wie sie ist.
Daher können Sie die Bibliothek laden, indem Sie den Pfad site-packages
am Anfang des von Lambda aufgerufenen EC2-Seitenskripts hinzufügen.
Im folgenden Beispiel wird "Site-Pakete" in der in Schritt 1 angegebenen Umgebung angegeben.
ec2.py
import sys
sys.path.append("/root/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/")
Von Anfang an nahm ich an, dass es sich um ein Problem auf dem Weg handelt, aber es dauerte einige Zeit, um die Ursache auf der Lambda-Seite und der EC2-Seite zu isolieren. Ist es auch einzigartig für verwaltete Dienste, z. B. die Verschwendung von Aufwand bei der Untersuchung, ob die Version als Funktion bereitgestellt wird? Es gab einen Fehler. Ähnliche Stolpersteine auf niedriger Ebene sind in Zukunft vorgesehen, aber in diesem Fall möchte ich mich an diese Erfahrung erinnern und zu den Grundlagen zurückkehren.