Fonction Lambda AWS pour démarrer et arrêter une instance EC2

Lambda fait partie du service « Compute » d’AWS (Amazon Web Services). En utilisant Lambda, nous pouvons coder sans provisionner ni gérer de serveurs. Lambda exécute automatiquement notre code sans que nous ayons à provisionner ou à gérer des serveurs. Il nous suffit d’écrire le code et de le télécharger dans la fonction Lambda.

Lambda exécute le code uniquement lorsque cela est nécessaire.. Elle se développe automatiquement en prenant en charge de quelques demandes à des milliers de demandes.

Nous sommes facturés pour chaque 100 ms que notre code exécute et pour le nombre de fois qu’il est déclenché. Nous sommes facturés uniquement pour le temps de calcul que notre code consomme et ne sommes pas facturés lorsque le code n’est pas exécuté. Pour en savoir plus sur la facturation, clique ici.

Ce que nous devons fournir, c’est juste le code et AWS Lambda se charge de la maintenance, de l’auto-scaling et de la haute disponibilité. Ce code peut également être exécuté en réponse à des événements. Pour utiliser Lambda, nous devons écrire le code dans l’un des langages qu’il fournit.

Dans cet article, nous allons voir comment créer une fonction Lambda simple qui peut démarrer/arrêter une instance EC2.

Pré-requis

  1. Compte AWS (Crée si tu n’en as pas)
  2. Les bases du service EC2(clique ici pour apprendre EC2).

Ce que nous allons faire

  1. Connecte-toi à AWS.
  2. Créer une fonction Lambda.
  3. Modifier le rôle IAM
  4. Exécuter le rôle

Connecte-toi à AWS

  1. Clique sur ici pour aller sur la page de connexion à AWS.

Lorsque nous cliquons sur le lien ci-dessus, nous voyons apparaître une page Web comme suit où nous devons nous connecter à l’aide de nos informations de connexion.

Connexion à AWS

Une fois que nous nous sommes connectés à AWS avec succès, nous verrons la console principale avec tous les services répertoriés comme suit.

AWS Management Console

Créer une fonction Lambda

Avant de procéder à la création d’une fonction Lambda, sélectionne la région souhaitée et la plus proche.

Clique sur la flèche près de la région par défaut (Ici, c’est Paris) et tu verras une liste de régions disponibles et sélectionne la région souhaitée. Ici, j’ai sélectionné « Paris », sans modification. Tu peux choisir en fonction de ton choix ou de tes besoins.

Crée une fonction Lambda

Clique sur « Services » dans le coin supérieur gauche et tu verras l’écran suivant avec tous les services disponibles sur AWS. Clique sur « Lambda » disponible sous « Compute ».

Lamda

Tu obtiendras un écran où tu peux créer une fonction Lambda. Clique sur « Créer une fonction ».

Créer une fonction

Tu peux soit créer une fonction par toi-même, soit utiliser les blueprints existants, soit parcourir un référentiel où nous pouvons rechercher la fonction requise pour voir si elle existe. Ici, nous allons créer notre propre fonction Lambda simple en utilisant Python.

Clique sur « Author from Scratch » pour écrire notre propre Fonction Lambda.

Donne un nom à la fonction.

Sélectionne « Python 3.6 » dans la liste déroulante du Runtime.

Choisis le runtime Python

La Fonction Lambda doit avoir des autorisations suffisantes pour son exécution. Sélectionne « Créer un nouveau rôle avec les permissions Lambda de base ». Cela créera un nouveau rôle avec le même nom que celui de la fonction, avec une clé aléatoire comme suffixe.

Les permissions par défaut ci-dessus ne sont pas suffisantes. Nous comprendrons mieux cela à l’étape suivante. Pour l’instant, nous allons simplement créer une fonction et voir quelles erreurs possibles peuvent survenir.

Ajoute le code suivant dans la fonction et clique sur le bouton « Enregistrer » pour enregistrer la fonction.

Change la valeur de « région et instances« .

import boto3
region = 'eu-west-3'
instances = ['i-05be5c0c4039881ed']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
    ec2.stop_instances(InstanceIds=instances)
    print('stopped your instances: ' + str(instances))

Fonction Lamda dans AWS

Code de fonction

Clique sur le bouton « Select a test Event » disponible à côté du bouton « Test » et sélectionne « Configure test event ». Tu obtiendras l’écran suivant. Ne fais aucune modification et donne simplement un nom à l’événement, ici c’est « testStopEC2 » et clique sur « Enregistrer ». Cet événement est juste un exemple d’événement et n’a aucun rapport avec notre fonction. Nous pouvons créer un événement différent en fonction de nos besoins.

Configurer l'événement de test

Remarque : Nous pouvons créer un événement Cloudwatch à l’aide duquel nous pouvons déclencher cette fonction Lambda en fonction de l’événement qui s’est déclenché dans Cloudwatch. Nous n’allons pas en parler maintenant, car il faudrait bien comprendre Cloudwatch.Nous allons donc procéder avec un événement simple. Tu pourras l’explorer une fois que tu te seras familiarisé avec Lambda et Cloudwatch.

Clique maintenant sur « Test ». Remarque attentivement, la fonction n’a pas réussi à s’exécuter en raison d’une autorisation insuffisante. C’est ce dont je parlais à l’étape précédente. Ne panique pas en regardant l’erreur. Nous allons attribuer les permissions requises au rôle qui a été créé lors de la création de la fonction Lambda.

Teste la fonction Lamda

Modifier le rôle IAM

Clique sur « Services » en haut à droite de l’écran et cherche IAM.

Service IAM

Tu verras apparaître l’écran suivant. Il s’agit de l’écran principal d’IAM. Nous n’entrerons pas dans les détails d’IAM dans cet article.

AWS IAM

Clique sur « Rôles » dans le panneau de gauche et clique sur le rôle qui commence par le même nom que celui de la fonction Lambda et dont le suffixe est une chaîne aléatoire.

Rôles

Clique sur « Attacher les politiques ».

Joindre les politiques

Cherche « ec2 » dans le champ de recherche et sélectionne « AmazonEC2FullAccess » dans la liste et clique sur le bouton « Attacher la politique ». Maintenant, nous sommes prêts à exécuter la fonction Lambda avec les autorisations requises.

Joindre la politique

Exécute la fonction Lambda

Retourne à notre fonction Lambda et clique maintenant sur le bouton « Test ». Cette fois, tu peux voir dans les journaux que la fonction a été exécutée avec succès. Cela signifie que la fonction Lambda a déclenché une demande d’arrêt de l’instance.

Exécute la fonction lambda

Va dans le service « EC2 » et regarde si l’instance avec l’id d’instance que nous avons fourni à la fonction Lambda a été arrêtée ou non. Ici, tu peux voir que l’état de l’instance est « Stopping », ce qui signifie que la fonction Lambda a traité avec succès notre demande d’arrêt de l’instance requise.

Lance l'Instance

Dans les étapes précédentes, nous avons vu une fonction Lambda pour arrêter une instance EC2. Nous allons maintenant voir comment démarrer une instance EC2 à l’aide de Lambda. Pour ce faire, tu peux soit modifier la même fonction, soit écrire une nouvelle fonction en suivant les mêmes étapes précédentes.

Ici, nous allons utiliser la même fonction et modifier simplement notre code Python.

Lance la fonction d'instance

Utilise le code suivant pour démarrer une instance EC2 à l’aide de Lambda.

Change la valeur de « région et instances ».

import boto3
region = 'eu-west-3'
instances = ['i-05be5c0c4039881ed']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
#    ec2.stop_instances(InstanceIds=instances)
    ec2.start_instances(InstanceIds=instances)
    print('stopped your instances: ' + str(instances))

Sauvegarde la fonction

Remarque: Fais attention en écrivant le code Python, il peut donner des erreurs si l’indentation n’est pas correcte.

Code de fonction

Clique sur « Test » pour exécuter la fonction.

Regarde les détails de l’exécution et tu peux clairement voir que la fonction a été exécutée avec succès.Cela signifie que la fonction Lambda a déclenché une demande de démarrage de l’instance.

Exécute la fonction Lamda

Ici, tu peux voir que l’état de l’instance est « Initialisation », ce qui signifie que la fonction Lambda a traité avec succès notre demande de démarrage de l’instance requise.

Conclusion :

Dans cet article, nous avons vu comment créer une fonction Lambda simple pour arrêter une instance ec2, attribuer les politiques requises aux rôles utilisés par la fonction Lambda. Nous avons également vu comment démarrer une instance EC2 à l’aide de la fonction Lambda. Nous avons édité la même fonction pour effectuer l’arrêt/démarrage de l’instance EC2, tu peux créer 2 fonctions différentes pour cela.

Vous aimerez aussi...