Je pense qu'il y a pas mal de besoins qui souhaitent exécuter régulièrement Python Script sur AWS. Cela peut être réalisé en configurant EC2 et en l'exécutant avec cron, mais ici je vais donner un aperçu de la façon de le réaliser en utilisant la fonction d'AWS Data Pipeline.
Cependant, veuillez noter qu'en tant que limitation de Data Pipeline, le cycle d'exécution ne peut être défini que sur 15 minutes ou plus, et il ne peut pas être exécuté toutes les minutes.
Il est également possible d'exécuter périodiquement la fonction Lambda dans Data Pipeline. Si le script est Node.js ou Java, je pense que c'est plus facile de le faire de cette façon.
Le flux des éléments à définir est le suivant. On suppose que le script Python lui-même est déjà terminé.
Créez un compartiment S3 pour placer le script Python. Bien entendu, le Bucket existant peut être utilisé. Accédez à AWS Console → S3 et suivez les étapes ci-dessous pour créer un compartiment S3.
Create Bucket
et donnez-lui un nom approprié (en supposant que vous ayez créé un bucket appelé datapipeline-python-test
)Suivez les étapes ci-dessous pour télécharger le script Python dans le compartiment S3.
→ ʻUpload
pour télécharger le script Python.
Ici, on suppose que le script suivant appelé datapipeline_test.py
, qui imprime simplement l'heure actuelle, a été téléchargé.datapipeline_test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
print 'Script run at ' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Accédez à AWS Console → Data Pipeline et créez un Data Pipeline en suivant les étapes ci-dessous.
Test Pipeline
)Exécuter la commande AWS CLI
dans Construire à l'aide d'un modèle
datapipeline-python-test
créé ci-dessus.sudo yum -y install python-devel gcc && sudo update-alternatives --set python /usr/bin/python2.7 && curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" && sudo python ./get-pip.py && pip install boto3 --user && aws s3 cp s3://datapipeline-python-test/datapipeline_test.py ./datapipeline_test.py && cat datapipeline_test.py && python ./datapipeline_test.py
Sélectionnez ʻEdit Architectavec ce paramètre pour créer une fois un pipeline de données. Une fois créés, deux rôles IAM seront créés dans le rôle IAM:
DataPipelineDefaultResourceRole et
DataPipelineDefaultRole`.
Étant donné que certaines autorisations sont insuffisantes immédiatement après la création du rôle IAM, accordez des autorisations d'accès à S3 à «DataPipelineDefaultResourceRole» et «DataPipelineDefaultRole». Accédez à AWS Console → Identity & Access Management → Rôles et suivez les étapes ci-dessous pour accorder des autorisations.
DataPipelineDefaultResourceRole
, sélectionnez-la et sélectionnez ʻAttach Policy
.Définissez les mêmes autorisations pour DataPipelineDefaultRole
Accédez à AWS Console → Data Pipeline et activez le Data Pipeline que vous venez de créer.
Test Pipeline
→ ʻActivate
L'exécution périodique du Data Pipeline est maintenant activée. Il fonctionne toutes les 15 minutes, alors attendons un peu.
Accédez à AWS Console → Data Pipeline, sélectionnez Test Pipeline
, sélectionnez Stdout
dans CliActivity
→ ʻAttempts tab`, et confirmez que l'heure actuelle est sortie par Python Script.
Je n'ai pas fait grand-chose, mais je vais compléter le contenu du ShellScript ci-dessus.
sudo yum -y install python-devel gcc
Un middleware supplémentaire est inclus dans le système d'exploitation (en supposant que certaines bibliothèques Python nécessitent gcc, etc.). Il peut être supprimé si le middleware standard Amazon Linux est suffisant
sudo update-alternatives --set python /usr/bin/python2.7
Python 2.7 est spécifié. Évitez la version par défaut de Python peut provoquer des erreurs dans la bibliothèque
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" && sudo python ./get-pip.py
Pip est inclus. Il peut être supprimé si la bibliothèque Python standard est suffisante
pip install boto3 --user
J'ai mis une bibliothèque supplémentaire de Python avec pip. Lors de l'utilisation de pip, l'argument de --user
est requis à cause de Permission. Si vous voulez mettre plusieurs bibliothèques, vous pouvez lister les demandes d'installation de pip boto3 numpy --user
etc.
aws s3 cp s3://datapipeline-python-test/datapipeline_test.py ./datapipeline_test.py
Copie du script Python en local
cat datapipeline_test.py
Le contenu du fichier téléchargé depuis S3 est affiché, vous pouvez le supprimer si vous n'en avez pas besoin.
python ./datapipeline_test.py
Enfin, j'exécute Python Script
Il est également possible d'ignorer l'e-mail d'alarme à l'aide de la fonction AWS SNS lorsque le script Python échoue. J'omettrai l'explication d'AWS SNS lui-même, mais je compléterai brièvement les paramètres sur le pipeline de données.
Test Pipeline
et sélectionnez ʻEdit Pipeline` → ʻOn Fail
dans ʻActivities` dans le volet droit.DefaulAction1
dans ʻOthers` dans le volet droit,Tapez
sur SnsAlarm
Topic Arn
Message
est le corps de l'e-mail d'alarme, Subject
est le sujet de l'e-mail d'alarmeRole
est DataPipelineDefaultRole
par défaut, mais sélectionnez un rôle avec l'autorisation de ʻAmazonSNSFullAccess`C'est OK si vous définissez. Il est possible de déclencher AWS SNS au moment de l'échec ou de la réussite du script. N'oubliez pas de donner l'autorisation de rôle pour exécuter Sns.
Si le script Python peut être exécuté périodiquement avec Data Pipeline, il n'est pas nécessaire de sécuriser / gérer individuellement les hôtes pour une exécution périodique ou une exécution de garantie, et divers progrès seront réalisés.
Recommended Posts