Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)

http://qiita.com/tf_qiita/items/90b4ec315d179b5d9b9c

Notez que le problème ci-dessus a été résolu.

Étape 1: spécifiez la version d'exécution

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"]
    },
)

Étape 2: Ajouter le chemin de la bibliothèque

À 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/")

Impressions

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.

Recommended Posts

Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Comment créer des couches AWS Lambda lors de l'exécution de sélénium × chrome sur AWS Lambda
[Version 2020] Comment installer Python3 sur EC2 d'AWS
Le module ne peut pas être importé en Python sur EC2 exécuté à partir d'AWS Lambda
Vérifiez types_map lors de l'utilisation de mimetypes avec AWS Lambda (Python)
Choses à noter lors de l'initialisation d'une liste en Python
Je veux AWS Lambda avec Python sur Mac!
Essayez d'exécuter Schedule pour démarrer et arrêter des instances dans AWS Lambda (Python)
Une petite histoire à savoir comme un point addictif lors de l'écriture d'applications Twilio à l'aide de Python sur AWS Lambda
Création d'un environnement pour exécuter des programmes Python sur AWS EC2
[Python] Permet d'importer les packages pip3 sur AWS Lambda
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Exécutez Python selon la planification sur AWS Lambda
Mettre à jour Mac Python de 2 à 3
xgboost (python) sur l'environnement d'instance EC2 Spot préparé par AWS Lambda
Remarques sur l'utilisation de la saisie semi-automatique lors de l'exécution interactive de Python sous Windows
Tout, de la création d'un environnement Python à son exécution sous Windows
Changer l'instance AWS EC2 de t2 à t3
Migrer les applications Django exécutées sur Python 2.7 vers Python 3.5
Connexion de python à MySQL sur CentOS 6.4
Comment accéder à RDS depuis Lambda (python)
[Python] Exécutez Headless Chrome sur AWS Lambda
Connectez-vous à s3 avec AWS Lambda Python
ImportError lors de la tentative d'utilisation du package gcloud avec la version AWS Lambda Python
Points à surveiller lors de la création d'un environnement Python sur un Mac
Lors de l'exécution d'un shell Python à partir d'Electron, transmettez plusieurs arguments pour exécuter Python.
Comment démarrer Python (Flask) au démarrage d'EC2
Exécutez régulièrement des programmes Python sur AWS Lambda
Points à noter lors du passage de NAOqi OS 2.4.3 à 2.5.5
Développement Python sur Ubuntu sur AWS EC2 (à l'aide de Jupyter Lab)
Remarque sur l'encodage lorsque LANG = C en Python
Remarque Python: lors de l'attribution d'une valeur à une chaîne
[AWS / Lambda] Comment charger une bibliothèque externe Python
Résumé de l'étude de Python pour utiliser AWS Lambda
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
J'ai essayé de réduire les coûts en démarrant / arrêtant EC2 dans un lot avec AWS Lambda
Créez des paramètres dans terraform pour envoyer des messages depuis AWS Lambda Python3.8 vers Slack
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
Points à garder à l'esprit lors du développement d'un robot d'exploration en Python
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
# 2 Créez un environnement Python avec une instance EC2 d'AWS (ubuntu18.04)
Terraform configuré pour lancer AWS Lambda à partir d'Amazon SQS
Préférences pour générer des GIF animés à partir de Python sur Mac
Points à garder à l'esprit lors de la copie de listes Python
Python - Remarques lors de la conversion du type str en type int
Comment configurer Layer sur Lambda à l'aide d'AWS SAM
De l'achat d'un ordinateur à l'exécution d'un programme sur python
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Prise en charge de l'environnement d'exécution Python 2.7 sur AWS Lambda (à partir de 2020.1)
Comment passer des arguments lors de l'appel d'un script python depuis Blender sur la ligne de commande
Remarque pour faire de python un démon
Tweet d'AWS Lambda
Exécution de MINST dans TensorFlow 2.0 et visualisation dans TensorBoard (version 2019)
Mercurial a cessé de fonctionner après la migration de Python 2 vers Python 3 (Remarque)
[AWS EC2] Comment installer Maven sur Amazon Linux 2
Points à garder à l'esprit lors du traitement des chaînes en Python2