Formation DevOps | Formation AWS Services : 8- Service Lambda

www.itgalaxy.io

AWS Lambdas

Qu’est-ce qu’AWS Lambda?
➢ Service permettant d’exécuter du code sans avoir besoin de gérer un serveur
➢ Facturation au temps de calcul consommé
➢ Dimensionnement en continu en fonction dela charge
➢ Approche micro-service

Intérêt d’AWS Lambda
➢ Déploiement du code simple
➢ Mise à l’échelle ( Scalability ) et Haute disponibilité managée par AWS
➢ Tarif très faible 0,2$/millions de requête (128MB)
➢ Multi langages/plateformes: NodeJS , Python , JVM
➢ Fonctionnement en mode synchrone ou asynchrone
➢ Intégration à divers Services AWS (S3, SNS, DynamoDB, Kinesis, API Gateway, CloudWatch Events…)
➢ Intégration dans un VPC

Cas d’usage (quelques exemples)
➢ Traitement de fichiers (ex: S3DynamoDB )
➢ Traitement de flux de données
➢ Extraction de données (ex: DynamoDB StreamS3 )
➢ Backend Application web

Fonctionnement Conteneurs
AWS Lambda utilise des conteneurs pour exécuter l’exécution
➢ La configuration du conteneur est définie à la création de lalambda
➢ plateforme cible ( nodejs , python , jvm )
➢ allocation mémoire
➢ temps maximum d’exécution
➢ un handler à appeler

Fonctionnement Premier appel d’une Lambda
➢ Un conteneur est lancé
➢ Le code de la Lambda est chargé
➢ L’éventuel contexte est créé (connexions …)
➢ Le handler spécifié est appelé

Fonctionnement Contexte d’uneLambda
➢ Le contexte de la Lambda reste initialisé entre deux invocations
➢ Les fichiers dans /tmpsont conservés entre deux invocations
➢ Les processus en tâche de fond sont stoppés une fois l’exécution du
handler est terminée
➢ Ceci s’applique à la durée de vie d’un conteneur!
➢ Il n’y a aucune garantie que Lambda réutilise le même conteneur!

Fonctionnement Cycle de vie d’une Lambda
Call Lambda Create Container Load Lambda Execute Lambda

Fonctionnement
Exécutions concurrentes

➢ Dans le cas d’un stream ( Kinesis , DynamoDB Streams ), le nombre
de Lambda en concurrence = nombre d’unités d’exécution
➢ Exemple, sur Kinesis , si nous avons 100 shards, nous aurons 100 Lambdas en concurrence

Fonctionnement Exécutions concurrentes
➢ Dans le cas d’une source qui n’est pas un Stream , le nombre de Lambdas dépendra de la fréquence d’appels ou d’évènements à traiter et de la durée
d’exécution

➢ Ex: dans un contexte de Lambda appelé par S3. Ajout de 100 fichiers / sec, 2 secondes de traitement / fichier=> 200 Lambdas enconcurrence

❖ Attention ,La simultanéité de votre fonction est le nombre d’instances répondant à des demandes à un moment donné. Pour un premier pic de trafic, la
simultanéité cumulative de votre fonction dans une même région peut atteindre un niveau initial de 500 à 3000, en fonction de la région.

Quotas de simultanéité en rafale :

3000 – USAOuest (Oregon), USA Est (Virginie du Nord), Europe (Irlande)
1000 – Asie-Pacifique (Tokyo), Europe (Francfort), USA Est (Ohio)
500 – Autres régions.

Fonctionnement Traitement des erreurs
Appel synchrone : le client ayant invoqué la Lambda reçoit une
réponse HTTP 429 et l’erreurde limitation ou HTTP 500 pour
l’erreur de system.
Appel asynchrone : l’évènement ayant entrainé l’échec est essayé à
nouveau trois fois avec un délai entre deuxexécutions
Traitement d’un stream : la lecture du stream est bloquée jusqu’à ce
que le problème soit résolu ou que l’évènement entrainant l’erreur
expire

Fonctionnement Permissions
➢ Dans le cas d’un appel direct, l’appelant doit avoir les droits nécessaires pour invoquer la Lambda
➢ Une ressource invoquant une Lambda ( S3 , SNS , API Gateway …) doit avoir les droits
➢ Dans le cas du Streaming , la Lambda effectue du polling sur la ressource ( Kinesis , DynamoDB Stream ), elle doit donc avoir les droits pour le faire

Monitoring
AWS Lambda utilise CloudWatch pour collecter les métriques ainsi que les logs Métriques:
❑ Nombred’invocations
❑ Duréed’exécution
❑ Nombred’erreurs
❑ Nombre d’invocations repoussées( throttle )
AWS Lambda est aussi connecté à AWS Cloudtrail qui enregistre les appels à l’API Lambda (et donc les invocations)

Configuration IAM
➢ Il y a deux types de permissions à considérer lorsque l’on utilise
Lambda
➢ celles permettant d’invoquer une Lambda
➢ celles permettant à la fonction Lambda d’utiliser des ressources AWS

Configuration IAM ARN des fonctions Lambda
arn:aws:lambda:::function:

ConfigurationIAM Autorisations pour invoquer une Lambda
✓ AWS fournit la Managed Policy AWSLambdaRole donnantaccès à toutes les Lambdas
✓ Il est possible de créer sa propre Policy (que l’on peut ensuite assigner à un User/Group/Role)
✓ Il est aussi possible d’ajouter des Policies directement sur la fonction Lambda ( Permissions ) via l’API. C’est ce qui fait automatiquement lors de l’ajout d’un trigger sur S3 pour l’invocation d’une Lambda

Configuration IAM Autorisations pour invoquer une Lambda
Exemple de Policy
{ “Version” : “2012- 10 - 17” ,
“Statement” { : [
“Effect"“Action” :: “Allow” [ ,
], “lambda:InvokeFunction”
“Resource"“arn:aws:lambda:eu
: [ - west-1:123456789012:function:formation*
} ]
} ]

Configuration IAM Autorisations pour invoquer une Lambda

Exemple d’ajout d’une permission pour l’invocation d’une Lambda depuis un Bucket
aws lambda add-permission
–region eu-west- 1
–function-name helloworld
–statement-id 1
–principal s3.amazonaws.com
–action lambda:InvokeFunction
–source-arn arn:aws:s3:::examplebucket
–source-account 123456789012
–profile adminuser

Voir les permissions associées à une Lambda

aws lambda get-policy –function-name arn:aws:lambda:eu-west-1:123456789012:function:test-s3

ConfigurationIAM Autoriser une Lambda à accéderà des ressources AWS
➢ une Lambda peut assumer un rôle (de la même manière qu’une instance EC2 )
➢ une Lambda pourra donc accéder à toutes les ressources AWS auxquelles elle est autorisée
➢ Amazon propose un certain nombre de Managed Policies. Il est recommandé de les utiliser

**Développement d’une Lambda (Java)

Example de code
package** example;
import import com.amazonaws.services.lambda.runtime.Context;com.amazonaws.services.lambda.runtime.LambdaLogger;

import java.util.Date;
public class Hello {
private Date lambdaContainerStartDate = new Date();
public LambdaLogger logger =String myHandler(String name, Context context) { context.getLogger();

lambdaContainerStartDate logger.log(String.));format( “This Lambda container has been created at %s\n” ,
logger.log(String. return name; format( “Hello %s\n” , name));

} }

Développement d’une Lambda (Java) Packaging
➢ Soit créer un Fat Jar contenant toutes les classes du projet
➢ Soit créer un Zip avec un répertoire contenant les
dépendances
➢ Pas de différence notoire entre les deux méthodes

Développement d’une Lambda (Java) Packaging
Version Fat Jar avec le plugin Shade de Maven
< plugi < groupIn > d >org.apache.maven.plugins</ groupId >
« artifactIversion >2.3 d >maven</ versio - shade n > -plugin</ artifactId >
< configuratio < createDependencyReducedPomn > >false</ createDependencyReducedPom >
«/ executionconfiguratios > n >
< executio < phase >package</ n > phase >
< goal < goas > l >shade</ goal >
</< executio / goals > n >
</ plugi </ executionn > s >

Développement d’une Lambda (Java) Packaging
Dépendances aux librairies Lambda
< dependenc < groupIdy >com.amazonaws> </ groupId >
« artifactIdversion >1.1.0</>aws-lambda version - java> -core</ artifactId >
«/ dependencdependencyy »
« groupIdartifactId >com.amazonaws</>aws-lambda-java groupId - events</> artifactId >
</ dependenc < version >1.1.0</ y > version >
La librairie évènements venant d’une ressource aws-lambda-java-events AWS ajoute le nécessaire pour parser les ayant invoqué la Lambda. Ellecontient
aussi les clients pour les services Notez que cette librairie est optionnelle, et qu’elle alourdieAWS (SQS, S3, Kinesis,sensiblement DynamoDB…)
lelivrable.

Invocation d’une Lambda Invocationsynchrone
➢ lorsqu’on la teste depuis la console AWS
➢ depuis l’ API (via SDK Java par exemple) ou la CLI
➢ depuis un service synchrone comme API Gateway ou une autre Lambda
➢ en appel synchrone, le type de retour du handler définira la réponse retournée par la Lambda

Invocation d’une Lambda Invocation synchrone

➢ L’invocation est liée à un évènement
➢ ex: ajout d’un fichier dans S3
➢ ex: insertion dans une table DynamoDB➢ ex: déclenchement d’un évènement Cloud Watch
➢ Deux types de modèles ( Event Push et Even Pull )

Invocation d’une Lambda Modèle Event Push
➢ Dans ce cas c’est la Source d’évènement qui invoque la Lambda
en lui passant l’évènement en question
➢ Ex de Source : S 3 , CloudWatch Event , SNS
➢ Dans ce modèle il est nécessaire d’accorder la permission à la Source d’invoquer la Lambda

Invocation d’une Lambda Modèle Event Push

Invocation d’une Lambda Modèle Event Pull
➢ S’applique aux services en mode Stream ( Kinesis et DynamoDB Stream )
➢ Dans ce cas la Lambda va scruter ( Poll) la source d’évènement ( Stream ) pour voir s’il y a des évènement disponibles
➢ Dans de modèle, il est nécessaire d’accorder à Lambda les permissions pour Poll la Source

Versioning
AWS Lambda supporte le Versioning des fonctions
➢ La version peut être définie dans l’ ARN à l’invocation d’une fonction. Par défaut $LATEST
arn:aws:lambda:::function::

Workshop S3 et Lambdas

Bonnespratiques
➢ Le code de la Lambda doit être stateless et ne doit pas présupposer d’informations liées à une précédente exécution
AWS Lambda essaie au maximum de ré-utiliser les conteneurs
existant. Il est donc recommandé d’initialiser les ressources
(connections …) en dehors du handler.
➢ Utiliser CloudWatch pour optimiser les temps d’exécution
➢ Plus de détails sur les bonnes pratiques.

Support Virtual Private Cloud
Lambda peut accéder à des ressources interne au VPC
➢ Resources AWS ayant un endpoint à l’intérieur du VPC ( RDS ,
Elastic Cache …)
➢ Instances EC2
Lambda utilise des E lastic N etwork I nterfaces pour se connecter à l’intérieur du VPC

➢ Configuration d’une Lambda avec support VPC :
➢ assigner un ou plusieurs Subnets
Attention : chaque container va utiliser une ENI par Subnet
➢ Assigner un Subnet par Zone de Disponibilité (pour diminuer les coûts et
la latence réseau)
➢ Penser à provisionner suffisamment d’ ENI en fonction du nombre
d’exécutionsconcurrentes
➢ assigner un ou plusieurs SecurityGroups

➢ Configuration d’une Lambda avec support VPC :
➢ assigner une Policy à la Lambda lui permettant la creation d’ ENI
➢ soit en utilisant la ManagedPolicy
AWSLambdaVPCAccessExecutionRole
➢ soit en ajoutant les permissions dans une Custom Policy :
➢ ec2:CreateNetworkInterface
➢ ec2:DescribeNetworkInterfaces
➢ ec2:DeleteNetworkInterface
➢ Si la Lambda doit accéder à des ressources sur internet, les appels
passeront par la NAT Gateway du VPC
➢ Les Subnets doivent avoir une réserve d’adresses IP suffisantes pour
provisionner les ENI (au moins > au nombre d’exécutions
concurrentes)
N’utilisez le support VPC que si vous en avez vraiment besoin!
Plus de détails sur lambda avec le support VPC Lien.






Decouvrez plus d’Offres de la plateform ItGalaxy.io :

Découvrez notre gamme complète de services et formations pour accélérer votre carrière.

1. Nous contactez

  • Description: Besoin de Formation et des Solutions cloud complètes pour vos applications
  • Links:

2. Infra as a Service

  • Description: Infrastructure cloud évolutive et sécurisée
  • Links:

3. Projets Développeurs


4. Développeurs


5. Formations Complètes


6. Marketplace

7. Blogs


This website is powered by ItGalaxy.io