Exécutez Python selon la planification sur AWS Lambda

introduction

[Certaines fonctionnalités ajoutées] concernant Lambda sur Amazon re: Invent 2015 en octobre 2015 (https://aws.amazon.com/jp/blogs/aws/aws-lambda-update-python-vpc-increased-function -duration-scheduling-and-more /) a été annoncé. Personnellement, les trois suivants sont importants.

Lancez AWS Lambda avec planification pilotée à l'aide de Data Pipeline J'ai écrit un article auparavant, mais la fonction d'exécution de planification est prise en charge en tant que fonction standard de Lambda. c'était fait. Dans cet article, j'écrirai la fonction Lambda à l'aide de Python et expliquerai la procédure pour exécuter la planification.

Limites

L'environnement d'exécution Lambda + Python + Schedule a été annoncé / ajouté cette fois, mais il y a certaines restrictions à prendre en compte. Les principaux éléments sont les suivants.

Cas 1: essayez de sortir avec Python Print toutes les 5 minutes

En tant que toute première étude de cas, c'est le cas le plus solide de l'exécution d'un calendrier de script Python qui s'imprime simplement toutes les 5 minutes. Consultez le journal pour voir si le résultat de l'exécution du programme est correctement émis.

À partir de Lambda dans la console AWS, sélectionnez «Créer une fonction Lambda».

Étape 1 Sélectionnez un modèle (blueprint = blueprint)

Il existe de nombreux modèles pour la fonction Lambda, mais recherchez et sélectionnez lambda-canary. Il s'agit d'un modèle pour l'exécution de la planification du script Python sur la fonction Lambda.

select_blueprint.png

Étape 2 Paramètres de source d'événement

Depuis cette fois, nous exécutons un calendrier, sélectionnez «Événement planifié» comme source de l'événement (je pense qu'il est sélectionné par défaut). «Nom» et «Description» sont OK si vous entrez une description appropriée. L'expression de planification doit être "rate (5 minutes)" par défaut, vous pouvez donc la laisser telle quelle.

Configure_event_sources.png

Paramètres de script Step3 Python

Définissez le script Python et le rôle IAM.

Le code Python utilise: C'est un code qui s'imprime simplement.

import json, datetime, commands

def lambda_handler(event, context):
    print commands.getoutput('cat /proc/cpuinfo | grep -e "processor" -e "model name"')
    print commands.getoutput('cat /proc/meminfo | grep MemTotal')
    print commands.getoutput('cat /proc/meminfo | grep MemFree')
    print datetime.datetime.now().strftime('%Y/%m/%d %H:%M')  
    print '-------------------------------'
    
    print event
    print event['account']
    print context.__dict__
    print context.memory_limit_in_mb

Outre le script Python, les paramètres suivants sont requis. D'autres sont bons avec maman par défaut.

Configure_function.png

Étape 4 Vérifiez les paramètres

Ceci est la confirmation finale. Sélectionnez «Activer maintenant» pour activer l'exécution de la planification avec ce paramètre. Sélectionnez «Activer maintenant» et appuyez sur «Créer une fonction» pour terminer.

Review.png

Étape 5 Imprimer Vérifiez le résultat de sortie

La sortie de la fonction Lambda est enregistrée dans les journaux CloudWatch. Dans CloudWatch Logs dans AWS Console, sélectionnez Lambda_Test. Ensuite, le journal d'exécution est ajouté toutes les 5 minutes, et je pense que le contenu imprimé reste dans le journal.

CloudWatchLogs.png

Supplément de script Python

Cas 2: essayez de changer le cycle d'exécution du programme de toutes les 5 minutes à toutes les 10 minutes

Étape 1 Supprimer les anciens paramètres d'exécution du programme

À partir de Lambda dans AWS Console, accédez à l'onglet ʻEvent sources de la fonction Lambda_Testque vous venez de créer. Supprimez le programme d'exécution défini dansrate (5 minutes)avecx et sélectionnez ʻAjouter une source d'événement. EditEventSource.png

Étape 2 Définition de l'exécution du programme toutes les 10 minutes

Dans la boîte de dialogue «Ajouter une source d'événement», sélectionnez «Événement planifié» pour «Type de source d'événement» et remplissez la boîte de dialogue comme suit.

Le point à noter ici est que la grammaire cron de Lambda est légèrement différente de la grammaire cron générale dite de Linux. Reportez-vous à cet article Veuillez écrire cron (0/10 * * *? *).

EditEventSource2.png

Si vous sélectionnez «Activer maintenant», le programme sera exécuté avec ce paramètre. Vérifiez si le journal d'exécution est dans les journaux CloudWatch toutes les 10 minutes.

Cas 3: essayez d'insérer une bibliothèque non standard

Si vous souhaitez utiliser une bibliothèque standard non Python 2.7 telle que numpy, pandas ou requests avec Lambda + Python, vous devez compresser et télécharger la bibliothèque avec le fichier de script lui-même. il y a. Pour plus de détails, consultez Création d'un package de déploiement (Python) sur le site Web officiel d'AWS. ).

Étape 1 Enregistrer le script Python en tant que fichier

Enregistrez le script Python suivant dans Local (nous supposerons que vous l'enregistrerez sous le nom de fichier LambdaTest.py). Le contenu du script Python consiste à HTTP GET google.co.jp à l'aide de la bibliothèque requests et à imprimer le code d'état et le corps de la réponse.

LambdaTest.py


import requests, datetime

def lambda_handler(event, context):
  target_URL = 'https://www.google.co.jp'

  r = requests.get(target_URL)
  print datetime.datetime.now().strftime('%Y/%m/%d %H:%M') 
  print '-------------------------------'
  print r.status_code
  print '-------------------------------'
  print r.text

Une bibliothèque appelée requests, qui n'est pas dans le standard Python 2.7, est requise, donc si vous enregistrez ce code dans Lambda tel quel, une erreur se produira. Par conséquent, placez le fichier de bibliothèque de requests dans le même dossier, compressez-le et enregistrez le zip dans Lambda.

Étape 2 Créez un fichier zip contenant la bibliothèque

Si vous exécutez pip install avec l'option -t / PathTo / LambdaTest.py, le fichier de bibliothèque sera placé dans le dossier spécifié. Par exemple, si LambdaTest.py est dans / home / hoge, vous pouvez exécuter pip install -t / home / hoge.

La structure du fichier doit ressembler à celle ci-dessous. Zip ces (2 dossiers, 1 fichier) et leur donner un nom approprié (disons LambdaLibraryZip.zip)

folder.png

Étape 3 Modifier le nom de la fonction du point d'entrée

Lors du téléchargement de la fonction Code of Lambda avec zip, le nom de la fonction Entry Point (fonction principale de Python) devient le nom de fichier * .py + . + Function of Entry Point in Script. Dans cet exemple, vous devez le définir sur LambdaTest.lambda_handler. Définissez Handler dans l'onglet Configuration sur LambdaTest.lambda_handler

HanderName.png

Étape 4 Téléchargez et exécutez le fichier zip

Depuis l'onglet Code, allez dans ʻUploader un fichier .ZIP, téléchargez le LambdaLibraryZip.zip que vous venez de créer, cliquez sur Enregistrer et tester`, et vérifiez si le script Python fonctionne correctement. S'il te plait donne moi.

uploadzip.png

finalement

Le support de Lambda pour l'exécution de Python et de Schedule est une très bonne nouvelle pour moi en tant que Python Love. Accédez à [Architecture à 2 niveaux] d'Amazon (http://www.slideshare.net/AmazonWebServicesJapan/aws-lambda-2tier) ou à Architecture sans serveur Je pense que ce sera un grand tremplin (et sera de plus en plus enfermé par Amazon ...).

Cependant, je pense qu'il y a encore des zones qui ne peuvent pas être remplacées par l'exécution de Lambda + Python + Schedule.

Cas qui doivent être exécutés dans un cycle court

Lambda a un cycle d'exécution minimum de 5 minutes. Je pense que cela couvrira de nombreux besoins, mais il y a aussi des exigences telles que "Je veux vérifier l'état et la surveillance active toutes les minutes". Je ne connais pas (si vous le savez, faites-le moi savoir) le service AWS qui exécute des programmes à cycle court sans serveur.

La proposition faite par Amazon est [EC2 t2.nano Instance](http://aws.typepad.com/aws_japan/2015/10/ec2-instance-update-x1-sap-hana-t2-nano-websites. html), donc je pense. Préparez une instance qui est encore moins chère que le t2.micro actuel et utilisez-la pour écrire au dos du dépliant.

Les cas qui prennent beaucoup de temps à traiter

Le temps de traitement maximal pour Lambda a maintenant été augmenté à 5 minutes (auparavant 1 minute). Lorsqu'il était d'une minute, utilisez la fonction Lambda pour amener le journal de S3 en local, analyser le contenu et, lorsqu'une erreur est trouvée, activer l'alarme et écrire le résultat dans RDS. À ce moment-là, il y avait un cas où Timeout se produisait lorsque la taille du journal dépassait plusieurs centaines de Mo, mais je pense que cette extension à 5 minutes couvrira de nombreux besoins. Cependant, il existe également des exigences qui nécessitent du temps de traitement, telles que "Traitement quotidien par lots ETL d'une grande quantité de données".

Autant que je sache, il y a des exigences qui prennent du temps à traiter avec ce type de calcul et de transfert de données.

Je pense que c'est bien.

Recommended Posts

Exécutez Python selon la planification sur AWS Lambda
[Python] Exécutez Headless Chrome sur AWS Lambda
Exécutez mysqlclient sur Lambda
Le module ne peut pas être importé en Python sur EC2 exécuté à partir d'AWS Lambda
[Python] Scraping dans AWS Lambda
Exécutez Tensorflow 2.x sur Python 3.7
Exécutez le CGI de Python sur CORESERVER
Exécutez la commande unix sur python
Exécutez YOLO v3 sur AWS v2
Exécutez YOLO v3 sur AWS
Vérifiez types_map lors de l'utilisation de mimetypes avec AWS Lambda (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)
Je veux AWS Lambda avec Python sur Mac!
Publié en tant que pièce jointe à Slack sur AWS Lambda (Python)
Exécutez AWS IoT Device SDK for Python sur Raspberry Pi
Récapitulatif si vous utilisez AWS Lambda (Python)
Ecrire une fonction AWS Lambda en Python
Exécutez l'image Docker de TensorFlow sur Python3
Essayez d'exécuter Schedule pour démarrer et arrêter des instances dans AWS Lambda (Python)
Publiez régulièrement des images de Papillon sur Python + AWS Lambda + Slack
Notifier HipChat avec AWS Lambda (Python)
[Python] Permet d'importer les packages pip3 sur AWS Lambda
Exécutez régulièrement Python sur Heroku Scheduler
xgboost (python) sur l'environnement d'instance EC2 Spot préparé par AWS Lambda
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Bonnes pratiques pour la journalisation au format JSON sur AWS Lambda / Python
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Exécutez TensorFlow sur une instance GPU sur AWS
[Python] Exécutez Flask sur Google App Engine
Installez la bibliothèque python sur Lambda à l'aide de [/ tmp]
Exécutez AzureKinect en Python la veille de Noël.
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Exécutez le code Python sur A2019 Community Edition
Connectez-vous à s3 avec AWS Lambda Python
Exécutez Python en C ++ sur Visual Studio 2017
Exécutez le serveur python wsgi sur l'unité NGINX
Python sur Windows
twitter avec python3
python sur mac
Jupyter sur AWS
Python sur Windbg
Mettez MicroPython sur Windows pour exécuter ESP32 sur Python
[Version 2020] Comment installer Python3 sur EC2 d'AWS
Exécutez Python YOLOv3 en C ++ sur Visual Studio 2017
Développement Python sur Ubuntu sur AWS EC2 (à l'aide de Jupyter Lab)
Comment exécuter MeCab sur Ubuntu 18.04 LTS Python
Exécuter périodiquement un script Python sur AWS Data Pipeline
LINE BOT avec Python + AWS Lambda + API Gateway
Exécutez des applications Web Python avec NGINX + NGINX Unit + Flask
Exécutez Zookeeper x python (kazoo) sur Mac OS X
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
Jinja2 2.9.6 ne fonctionne pas sur la série Lambda Python 3
Exécutez l'installation de pip sur MacOS Python 3.7 ou version ultérieure
[AWS / Lambda] Comment charger une bibliothèque externe Python
Exécutez Flask sur CentOS avec python3.4, Gunicorn + Nginx.
(Pour moi-même) AWS_Flask_3 (Installer / exécuter Flask sur AWS)
Résumé de l'étude de Python pour utiliser AWS Lambda
Version Amazon API Gateway et AWS Lambda Python
TensorFlow: exécuter des données apprises en Python sur Android