http://qiita.com/tf_qiita/items/90b4ec315d179b5d9b9c
Notez que le problème ci-dessus a été résolu.
Lorsque vous utilisez la commande d'exécution EC2 à partir de Lambda, la commande d'exécution exécute la version définie dans l'état initial de l'instance, et non l'exécutable Python ** qui est activé sur l'instance EC2 cible. (Pour Amazon Linux, il s'agit actuellement du 2.7.12)
Par conséquent, lors de l'exécution d'une version de Python différente de la norme, spécifiez le fichier d'exécution avec le chemin complet dans la commande d'exécution décrite dans Lambda comme indiqué ci-dessous. Dans l'exemple ci-dessous, l'environnement intégré pyenv est spécifié. Puisque Lambda est exécuté en tant que root, pyenv est construit en tant que root, mais si vous le spécifiez directement et que vous l'exécutez, vous devez créer un utilisateur pour l'exécution.
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"]
},
)
À l'étape 1, la version requise (environnement) est exécutée sans ajouter le chemin de Python à exécuter à la variable d'environnement, de sorte que la bibliothèque ne peut pas être importée telle quelle.
Par conséquent, vous pouvez charger la bibliothèque en ajoutant le chemin site-packages
au début du script côté EC2 appelé depuis Lambda.
Dans l'exemple ci-dessous, site-packages
sous l'environnement spécifié à l'étape 1 est spécifié.
ec2.py
import sys
sys.path.append("/root/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/")
Dès le début, j'ai supposé que c'était un problème autour du chemin, mais il a fallu du temps pour isoler la cause côté Lambda et côté EC2. En outre, est-il unique aux services gérés, comme le gaspillage d'efforts pour déterminer si la version est fournie en tant que fonction? Il y a eu un échec. Des pierres d'achoppement similaires sont prévues à l'avenir, mais dans ce cas, je voudrais rappeler cette expérience et revenir à l'essentiel.