Fermer

octobre 3, 2019

Créer une tâche cron sur AWS Lambda –


Les tâches Cron sont des outils très utiles dans tous les systèmes d'exploitation Linux ou Unix. Ils nous permettent de planifier l'exécution périodique de scripts. Leur flexibilité les rend idéales pour les tâches répétitives telles que les sauvegardes et le nettoyage du système, mais également pour l'extraction et le traitement des données.

Pour tous leurs avantages, les tâches cron présentent également des inconvénients. Le principal est que vous avez besoin d’un serveur dédié ou d’un ordinateur qui fonctionne quasiment 24h / 24 et 7j / 7. La plupart d’entre nous n’ont pas ce luxe. AWS Lambda est la solution idéale pour ceux d’entre nous qui n’ont pas accès à une telle machine.

AWS Lambda est une plate-forme informatique sans serveur, gérée par les événements, qui fait partie d’Amazon Web Services. C’est un service informatique qui exécute le code en réponse à des événements et gère automatiquement les ressources informatiques requises par ce code. Non seulement il est disponible pour exécuter nos travaux 24 heures sur 24, 7 jours sur 7, mais il leur alloue automatiquement les ressources nécessaires.

La configuration d'un serveur Lambda dans AWS implique davantage que la mise en œuvre de quelques fonctions et l'espoir qu'elles s'exécutent périodiquement. Pour les rendre opérationnels, plusieurs services doivent d'abord être configurés et fonctionner ensemble. Dans ce didacticiel, nous allons d'abord passer en revue tous les services que nous devons configurer, puis mettre en œuvre un travail cron qui extraira des prix de crypto-monnaie mis à jour.

Comprendre les bases

Comme nous l'avons dit. plus tôt, certains services AWS doivent fonctionner ensemble pour que notre fonction Lambda fonctionne comme un travail cron. Examinons chacun d'eux et comprenons leur rôle dans l'infrastructure.

S3 Bucket

Un compartiment Amazon S3 est une ressource de stockage en cloud public disponible dans Amazon Web Services (AWS), Simple Storage Service (S3). , une offre de stockage d'objets. Les compartiments Amazon S3, similaires aux dossiers de fichiers, stockent des objets composés de données et de métadonnées descriptives. – TechTarget

Chaque fonction Lambda doit être préparée comme un "package de déploiement". Le package de déploiement est un fichier .zip comprenant le code et toutes les dépendances dont ce code pourrait avoir besoin. Ce fichier .zip peut ensuite être téléchargé via la console Web ou situé dans un compartiment S3.

Rôle IAM

Un rôle IAM est une identité IAM que vous pouvez créer dans votre compte et possédant des caractéristiques spécifiques. autorisations. Un rôle IAM est similaire à un utilisateur IAM, en ce sens que c'est une identité AWS avec des stratégies d'autorisation qui déterminent ce que l'identité peut et ne peut pas faire dans AWS. – Amazon

Nous devons gérer les autorisations pour notre fonction Lambda avec IAM. À tout le moins, il devrait être capable d'écrire des journaux, il a donc besoin d'accéder à CloudWatch Logs. C'est le strict minimum et nous pourrions avoir besoin d'autres autorisations pour notre fonction Lambda. Pour plus d'informations, la page Autorisations AWS Lambda contient toutes les informations nécessaires.

Règle des événements CloudWatch

CloudWatch Events prend en charge les expressions de type cron, que nous pouvons utiliser pour définir la fréquence de création d'un événement. . Nous devons également nous assurer que nous ajoutons notre fonction Lambda en tant que cible pour ces événements.

Permission Lambda

La création des événements et le ciblage de la fonction Lambda ne suffisent pas. Nous devrons également nous assurer que les événements sont autorisés à appeler notre fonction Lambda. Tout élément souhaitant appeler une fonction Lambda doit disposer d'une autorisation explicite à cet effet.

Il s'agit des éléments de base de notre travail AWS Lambda cron. Maintenant que nous avons une idée de toutes les parties mobiles de notre travail, voyons comment nous pouvons le mettre en œuvre sur AWS.

Implémentation d'un travail cron sur AWS

Un grand nombre des interactions décrites précédemment sont gérées par Amazon automatiquement. En un mot, tout ce que nous avons à faire est d’implémenter notre service (la fonction lambda proprement dite) et d’y ajouter des règles (fréquence et mode d’exécution du lambda). Les autorisations et les rôles sont pris en charge par Amazon. Les valeurs par défaut fournies par Amazon sont celles que nous allons utiliser.

Fonction Lambda

Commençons par implémenter une fonction lambda très simple. Dans le tableau de bord AWS, utilisez la fonction Trouver services pour effectuer une recherche par lambda

. Dans la console lambda, sélectionnez Créez une fonction . À ce stade, nous devrions être dans Lambda > Fonctions > Fonction Create .

Pour commencer, commençons par un message de journal statique. Notre service ne sera qu'une fonction d'impression. Pour cela, nous utiliserons Node.js 10x comme langage d’exécution. Donnez-lui un nom de fonction, puis dans le rôle d’exécution restons dans . Créez un nouveau rôle avec les autorisations lambda de base . Il s'agit d'un ensemble d'autorisations de base sur IAM qui nous permet de télécharger des journaux dans des journaux Amazon CloudWatch. Cliquez sur Créer une fonction .

 Créer une nouvelle fonction lambda

Notre fonction est maintenant créée avec un rôle IAM. Dans la zone de code, remplacez le code par défaut par le suivant:

 exports.handler = async (event) => {
    console.log ("Bonjour Sitepoint Reader!");
    revenir {};
};

Pour vérifier si le code s'exécute correctement, nous pouvons utiliser la fonction Test . Après avoir donné un nom à notre test, il exécutera le code et affichera sa sortie dans le champ Execution Result situé juste en dessous de notre code.

Si nous testons le code ci-dessus, nous pouvons voir que nous n'avons pas de réponse. , mais dans les journaux de fonction, nous pouvons voir que notre message est imprimé. Cela indique que notre service fonctionne correctement et que nous pouvons poursuivre notre implémentation de cron.

Règles

La prochaine étape de notre création de Cron consiste à créer des déclencheurs CloudWatch récurrents. Ceci garantira que notre fonction lambda est exécutée de manière récurrente.

Passons donc au menu Services et sélectionnez Cloudwatch sous Gestion et gouvernance . Comme nous devons créer une nouvelle règle, sélectionnez simplement l'option Règles dans le menu de gauche. On peut le trouver juste sous Events . Dans la console Règles, cliquez simplement sur le bouton Nouvelle règle .

 Créez une nouvelle règle

Si nous examinons de plus près, juste sous Event Source nous pouvons voir deux options: Modèle d'événement et Calendrier . Nous voulons planifier l’invocation d’une cible particulière, sélectionnons donc l’option Schedule . Maintenant, nous pouvons soit entrer un taux d'exécution fixe en utilisant le formulaire, soit entrer une règle crontab . Dans ce cas particulier, nous utiliserons un tarif fixe d’une minute. Avec notre taux sélectionné, nous savons qu'il est nécessaire de sélectionner quelle sera notre cible d'invocation. A droite, dans le menu Cibles cliquez sur Ajouter une cible . Sélectionnez Fonction Lambda dans le menu déroulant et dans la liste Fonction sélectionnez notre fonction simpleStaticLogMessage lambda.

Ensuite, nous devrons cliquer sur . ] Configurez Détails pour ajouter un nom et une description à notre nouvelle règle. L'état doit être activé . Enfin, cliquez sur Créer une règle pour créer notre règle

Avec notre fonction Lambda et notre règle de planification créées, plaçons-la enfin en action. Revenons à la console Lambda, sélectionnez notre fonction simpleStaticLogMessage et cliquez sur Surveillance en haut à gauche. Ce tableau de bord de surveillance comporte une pléthore de graphiques pour montrer l’utilisation de nos services. Des invocations, durée et erreurs à DeadLetterErrors, ce tableau de bord contient toutes les informations nécessaires pour analyser l'utilisation de nos services.

N'oubliez pas que cette fonction lambda n'a pas de trafic sortant. Nous devons donc vérifier les journaux pour voir si ça marche. Sélectionnez donc le Afficher les journaux dans CloudWatch dans le côté droit.

 Console de surveillance

Ouvrez simplement le flux de journaux pour notre fonction et nous devrions pouvoir voir notre message «Bonjour

Il s’agissait d’un service très simple, sans utilisation pratique, aussi, désactivons-le en retournant au menu Règles du CloudWatch . console, sélectionnez la règle et sous Actions cliquez sur l'option de suppression.

Notre service de cryptomonnaie

Maintenant que nous savons comment créer un travail cron avec AWS Lambda, nous pouvons nous concentrer sur la création d'un service peut apporter une certaine valeur. Nous utiliserons un environnement d’exécution Python 3.7 pour créer une fonction Lambda qui récupérera la valeur actuelle (en dollars américains) des trois principales crypto-devises. Nous les imprimerons ensuite comme nous l’avons fait pour notre exemple simple. Ainsi, chaque minute, nous aurons les valeurs mises à jour de Bitcoin, Ethereum et Litecoin.

Créez une nouvelle fonction Lambda, comme nous l'avons fait pour le journal statique, et ajoutez le code suivant:

 import json
depuis les requêtes d'importation botocore.vendored

def lambda_handler (événement, contexte):

    bitcoin_api_url = 'https://api.coinmarketcap.com/v1/ticker/bitcoin/'
    ethereum_api_url = 'https://api.coinmarketcap.com/v1/ticker/ethereum/'
    litecoin_api_url = 'https://api.coinmarketcap.com/v1/ticker/litecoin/'

    bitcoin_response = requests.get (bitcoin_api_url)
    bitcoin_response_json = bitcoin_response.json ()

    ethereum_response = requests.get (ethereum_api_url)
    ethereum_response_json = ethereum_response.json ()

    litecoin_response = requests.get (litecoin_api_url)
    litecoin_response_json = litecoin_response.json ()

    print ("BTC:" + bitcoin_response_json [0]['price_usd'])
    print ("ETH:" + ethereum_response_json [0]['price_usd'])
    print ("LTC:" + litecoin_response_json [0]['price_usd'])

    revenir {}

Quelques notes rapides sur le code ci-dessus. La bibliothèque request n'est pas disponible par défaut sur Lambda. Donc, nous l’installons ou utilisons la ligne de botocore.vendored import request pour y accéder. Nous utiliserons ensuite la bibliothèque de requêtes pour extraire les informations de l’API coinmarketcap. En fin de compte, nous n'imprimons que les valeurs de chaque crypto-monnaie.

À partir de là, nous devons ajouter une règle et enfin la regarder fonctionner sur CloudWatch. Avoir cette information sur les journaux n’est pas très utile, mais à partir de là, nous avons une foule de façons de récupérer les informations récupérées. Nous pouvons le stocker dans une base de données DynamoDB, nous pouvons l'envoyer à différents services en utilisant SQS et SNS ou toute autre utilisation envisageable.

Conclusion

Le fait de pouvoir exécuter des tâches cron sur le cloud peut faire toute la différence. dans une entreprise. Avec AWS Lambda, nous n’avons plus besoin de machines dédiées aux ressources limitées qui effectuent des calculs coûteux 24 heures sur 24, 7 jours sur 7. Nous avons maintenant accès à une puissance de calcul presque illimitée sans qu'il soit nécessaire de réduire la vitesse et la disponibilité de notre entreprise.




Source link