Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. AWS Lambda
  3. Fonctions Lambda événementielles
Extrait - AWS Lambda Développez des micro-services en Java sur la plateforme serverless d'Amazon
Extraits du livre
AWS Lambda Développez des micro-services en Java sur la plateforme serverless d'Amazon
1 avis
Revenir à la page d'achat du livre

Fonctions Lambda événementielles

Introduction

Au cours du chapitre précédent, nous avons examiné en détail le développement de fonctions Lambda qui exposent des API REST. Ces fonctions sont synchrones, comme on a pu le voir. Mais une des caractéristiques essentielles des fonctions Lambda est leur caractère événementiel, c’est-à-dire leur capacité à se déclencher sur réception d’événements, de manière asynchrone, sans qu’un appel explicite soit nécessaire. Dans ce chapitre, nous allons donc étendre le scénario implémenté précédemment, afin de le compléter avec une nouvelle fonction Lambda événementielle, qui sera déclenchée par l’arrivée dans un compartiment S3 d’un fichier contenant des ordres de virement bancaire.

Pour mémoire, notre scénario général est reproduit dans la figure ci-dessous :

Le scénario général

Le scénario général

Et voici le scénario qui sera implémenté à la fin de ce chapitre.

Le scénario courant

Le scénario courant

Voici les étapes de notre scénario :

  • Un fichier XML contenant des ordres de virement bancaire sera transféré dans un compartiment S3 par un script AWS CLI.

  • Ceci provoquera le déclenchement d’une fonction Lambda, définie de manière à...

Le projet Java

 Créez un nouveau répertoire destiné à contenir le projet associé au présent chapitre et positionnez-vous dedans.

 Clonez le repository GIT ainsi :

$ git clone https://github.com/nicolasduminil/aws-lambda.git 
... 
$ cd chapter5 

 Ouvrez votre IDE si ce n’est pas déjà fait. Allez à File - New - Project from existing sources et sélectionnez le sous-répertoire nommé chapter5 dans lequel vous aviez cloné le projet. Cliquez sur OK.

 Dans le nouvel écran Import Project qui s’affiche, cochez l’option Import project from external model et, dans la liste déroulante en dessous, sélectionnez Maven. Cliquez sur Finish.

Vous venez d’importer dans votre IDE le projet Java associé à ce chapitre. Il s’agit bien évidemment d’un projet Maven, comme tous les autres.

1. Le fichier pom.xml

 Ouvrez maintenant le fichier pom.xml du projet :

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
  <modelVersion>4.0.0</modelVersion> 
  <groupId>fr.simplex-software.aws.lambda</groupId> 
  <artifactId>chapter5</artifactId> 
  <version>1.0-SNAPSHOT</version> 
  <name>Money Transfer :: The S3 upload module</name> 
  <properties> 
    <maven.compiler.source>11</maven.compiler.source> 
    <maven.compiler.target>11</maven.compiler.target> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  </properties> 
  <dependencyManagement> 
    <dependencies> 
      <dependency> 
        <groupId>org.jboss.resteasy</groupId> 
        <artifactId>resteasy-bom</artifactId> ...

Déploiement et exécution

Le déploiement du projet est fait, comme d’habitude, avec le scriptdeploy.sh, que voici :

#!/bin/bash 
RANDOM=$$ 
BUCKET_NAME=bucketname-$RANDOM 
STAGE_NAME=dev 
AWS_REGION=$(aws configure list | grep region | awk '{print $2}') 
aws s3 mb s3://$BUCKET_NAME 
echo $BUCKET_NAME > bucket-name.txt 
sam deploy --s3-bucket $BUCKET_NAME --stack-name chapter5-stack 
--capabilities  
CAPABILITY_IAM --parameter-overrides BucketName=
$AWS_REGION-$STAGE_NAME-$BUCKET_NAME 
aws cloudformation wait stack-create-complete --stack-name 
chapter5-stack 

C’est presque le même script utilisé précédemment qui crée un compartiment S3, pour y stocker le JAR à déployer et qui utilise la commande sam deploy pour effectuer le déploiement proprement dit. À noter l’argument -parameter-overrides qui définit le nom d’un deuxième compartiment S3, celui qui déclenchera l’exécution de la fonction lorsqu’un fichier y sera déposé. Ce nom combine la région courante, le nom de l’étape de déploiement (par exemple dev, test, prod, etc.) ainsi que le nom généré aléatoirement.

Exécuter ce script produira le résultat suivant :

nicolas@BEL20:~/AWSLambda/projects/aws-lambda/chapter5$ ./deploy.sh  
make_bucket: bucketname-11382 
 
    Deploying with following values 
    =============================== 
    Stack name               : chapter5-stack 
    Region                   : None 
    Confirm changeset        : False 
    Deployment...