Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Lambda Best practices

Marc
November 21, 2019

AWS Lambda Best practices

In this workshop, I’ll present what are the best practices around Lambda. We will discuss about secrets management, VPC usage, cost optimization, concurrency and scaling of your serverless applications.

The different topics will give you what could be done but mostly what should be done to allow you to optimize your usage of Lambda and serverless technologies on AWS.

Marc

November 21, 2019
Tweet

More Decks by Marc

Other Decks in Technology

Transcript

  1. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T AWS Lambda Patterns & bonnes pratiques Alexandre Pinhel – AWS, Solutions Architect Florian Chazal – AWS, Solutions Architect
  2. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Rappel - Applications serverless Services Changement données Requêtes web (API) Changement état Evénements déclencheur Fonction Node.js Python Java C# Go Ruby Runtime API Queue, Streams, Step functions…
  3. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Anatomie d’une function Lambda Handler() Fonction exécutée à l’invocation Event Données envoyée durant l’invocation de la fonction Context Méthodes pour interagir avec les informations de runtime (requestID, log group…) import json def lambda_handler(event, context): # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello World!') }
  4. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Patterns serverless selon la source d’événement (1/2) 1. Fichier dans un bucket 2. Invocation Lambda 2. Invocation Lambda 1. Message dans un topic Data 1. Message dans une queue 3. La function supprime les messages de la queue 2. Lambda interroge et traite les messages Topic Message Object
  5. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Patterns serverless selon la source d’événement (2/2) 2. Lambda interrogee le stream 1. Données dans un stream 3. Amazon Kinesis renvoit les données du stream Data 2. Invocation lambda 1. Chatbot besoin de clore le chat Chatbot 1. Horloge d’événements 2. Invocation lambda Event (time-based)
  6. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T A W S C l o u d 9 AWS Toolkit pour PyCharm AWS Toolkit pour IntelliJ AWS Toolkit pour VS Code Toolkits Open source toolkits AWS Toolkits pour les IDEs + IDEs Nouveautés pour les développeurs – toolkits AWS
  7. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Nouveautés pour les développeurs – Lambda Layers Permettre aux fonctions de partager du code: Déployer une layer et la référencer dans plusieurs fonctions Permettre la separation des responsabilités et laisser les développeurs se concentrer sur la logique métier Support pour partage dans l’écosystème choisi
  8. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Utilisation des Lambda Layers • Mettre les composants commun dans un fichier ZIP et uploader en tant que Layer Lambda • Les Layers sont immutables et sont versionnées pour gérer les mises à jour • Quand une version est effacée ou les permissions d’utilisation révoquées, les fonctions qui utilisent cette version continue de fonctionner, mais il n’est plus possible de la référencer dans de Nouvelles fonctions. • Vous pouvez référencer jusqu’à 5 layers, une d’entre elles peut être un custom runtime Lambda Layers arn:aws:lambda:region:accountId:layer:shared-lib Lambda Layers arn:aws:lambda:region:accountId:layer:shared-lib:2 Lambda Layers arn:aws:lambda:region:accountId:layer:shared-lib:3
  9. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T API Lambda Runtime Apporter n’importe quel runtime compatible Linux Une API Runtime qui codifie les appels et les points d’integration Un runtime Ruby fourni par AWS et d’autres par des partenaires (Erlang, Cobol) Les runtimes Custom sont distribuées sous forme de “layers” Rule Stack
  10. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Bootstrap d’un Runtime Custom • L’executable bootstrap agit comme un pont entre le Runtime HTTP de Lambda et la function à exécuter • Le Boostrap doit gérer la gestion des réponses et des erreurs, créer le contexte et executer la fonction • Les informations liées au endpoint et les handler de function sont partagées comme des variables environnement /runtime API /invocation/next /init/error /ID/error /invocation/ID/response /invocation/ID/error bootstrap Process events/headers Clean up Initialize and Invoke function Response/Error handling Lambda Functio n
  11. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Garder l’orchestration en dehors du code Tracer le statut de l’execution et des données Supprimer le code redondant
  12. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T AWS Step Functions Gestion de workflow “Serverless” • Coordonner des composants dans des applications distribuées et des microservices avec un workflow visuel • Déclenche automatiquement et trace chaque étape, gère le rejeu quand il y a des erreurs, votre application s’execute dans l’ordre et comme attendu • Gestion simplifiée des tâches humaines (approbation par email) • Loggue l’état de chaque étape, si il y a un incident vous pouvez diagnostiquer et debugger les problèmes Tâches Choix Capture erreur Tâches parallèles
  13. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Intégration de step functions Créer des workflows pour la gestion de commandes, generation de rapport, analyse de données Moins de code à écrire, ajout de services simplifié Les services intégrables: AWS Step Functions Amazon Simple Notification Service Amazon Simple Queue Service Amazon SageMaker AWS Glue AWS Batch Amazon Elastic Container Service AWS Fargate
  14. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Intégration avec moins de code Avant: en mode polling Intégration avec un service Start End AWS Lambda Start End Pas de fonctions Lambda
  15. S U M M I T © 2019, Amazon Web

    Services, Inc. or its affiliates. All rights reserved.
  16. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Web application Data stored in Amazon DynamoDB Dynamic content in AWS Lambda Browser
  17. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T • Bucket Policies • ACLs • OAI • Geo-Restriction • Signed Cookies • Signed URLs • DDOS Protection AuthZ Serverless web app security • Cross Account Lambda • Throttling (per Method) • Resource Policies • Usage Plans Static Content Browser • Encryption at Rest • VPC Endpoint • Function policies • Env Variables
  18. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T 2. Submit image 4. DetectFaces 7. DetectText 1. Upload 3. Store image Lambda Step Functions 5. DetectLabels 6. DetectModerationLabels 8. Store metadata & analysis DynamoDB Amazon ES Image processing with Amazon Rekognition Image
  19. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Ingestion de données en streaming Delivery metrics Buffered files Kinesis Agent Record producers Table loads Domain loads Source record backup Transformations & enrichment Lookup tables Raw records Lookup Transformed records Transformed records Raw records Delivery stream
  20. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Faire de l’analyse en temps réel Kinesis Data Streams: Ingest stream Kinesis Data Analytics: Time window aggregation Kinesis Data Firehose: Error stream Amazon S3: Error records Record producers AWS Lambda: Alert function Amazon DynamoDB: Device thresholds Amazon SNS: Notifications
  21. S U M M I T © 2019, Amazon Web

    Services, Inc. or its affiliates. All rights reserved.
  22. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Utiliser un framework AWS Chalice AWS Amplify AWS SAM AWS: Third-party: Serverless Framework
  23. SAM Template Indique à AWS CloudFormation que c’est un SAM

    template qu’il doit transformer Créé une function AWS Lambda avec une policy IAM, le runtime, le code sous format zip et le handler de démrrage. Créé une Amazon API Gateway avec Le chemin et s’occupe de faire le mapping des permissions entre les composants. Créé une table Amazon DynamoDB avec 5 RCU & WCU AWSTemplateFormatVersion: '2010-09-09’ Transform: AWS::Serverless-2016-10-31 Resources: GetHtmlFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://sam-demo-bucket/todo_list.zip Handler: index.gethtml Runtime: nodejs6.10 Policies: AmazonDynamoDBReadOnlyAccess Events: GetHtml: Type: Api Properties: Path: /{proxy+} Method: ANY ListTable: Type: AWS::Serverless::SimpleTable
  24. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs6.10 AutoPublishAlias: !Ref ENVIRONMENT DeploymentPreference: Type: Linear10PercentEvery10Minutes Alarms: # A list of alarms that you want to monitor - !Ref AliasErrorMetricGreaterThanZeroAlarm - !Ref LatestVersionErrorMetricGreaterThanZeroAlarm Hooks: # Validation Lambda functions that are run before & after traffic shifting PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PostTrafficLambdaFunction AWS SAM + Déploiements maîtrisés
  25. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Gestion des droits • Utilisez les policies prédéfinies qui existent aujourd’hui • Si vous faites une policy “service:*”, soyez VRAIMENT VRAIMENT VRAIMENT sûrs que c’est ce que vous avez besoin et voulez faire • Soyez prudents sur qui peut invoquer et à quoi cela accède • Execution policy: cette fonction peut appeler une ressource AWS en utilisant IAM • Function Policy: Action sur le bcuket peut appeler cette Lambda
  26. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T IAM Policy dans AWS SAM MyFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python2.7 Policies: - AWSLambdaExecute # Managed Policy - Version: '2012-10-17' Statement: - Effect: Allow Action: - dynamodb:GetItem Resource: !GetAtt MyDynamoDBTable.Arn
  27. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T AWS Lambda – Variables d’environnement Paire clé-valeur passé dynamiquement à votre fonction Disponible dans les API d’accès aux variables d’environnement standard (dépend du runtime) Peut se chiffrer avec AWS Key Management Service (AWS KMS) Utile pour gérer des environnements (dev, test, prod)
  28. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T AWS Systems Manager―Parameter Store Stockage centralisé pour gérer vos données de configuration Supporte les hiérarchies En clair ou chiffré avec AWS KMS Peut envoyer des notifications à Amazon SNS ou Lambda Peut être protégé avec IAM Les appels sont disponibles dans AWS CloudTrail Peut ajouter des tags Disponible par API ou au travers des SDK Plaintext or encrypted with AWS KMS Utile pour vos variables d’environnement ou des "feature flags” Pour les secrets, AWS Secrets Manager. AWS Secrets Manager
  29. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Accès au Parameter store avec le SDK Python import json, boto3 ssm = boto3.client('ssm') def get_parameter(): response = ssm.get_parameter( Name='LambdaSecureString’, WithDecryption=True ) return response['Parameter']['Value'] def lambda_handler(event, context): value = get_parameter() print(”value = %s" % value)
  30. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Environnement éphémère import boto3 client = None def my_handler(event, context): if not client: client = boto3.client("s3") # process REMEMBER – containers are reused Lazily load variables in global scope Don’t load it if you don’t need it REMEMBER – Si vous avez des credentials, gérer les exceptions en cas d’expiration des credentials.
  31. S U M M I T © 2019, Amazon Web

    Services, Inc. or its affiliates. All rights reserved.
  32. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Cycle de vie d’une requête Bootstrap le runtime Démarre votre code Cold start Warm start Télécharge votre code Démarre le container AWS optimise Vous optimisez
  33. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T La même vue dans AWS X-Ray
  34. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Petit changement – Grosses différences # Récupérer les fichiers et les IP for key in src_keys: response = s3_client.get_object(…) contents = response['Body'].read() for line in contents.split('\n')[:-1]: line_count +=1 try: data = line.split(',') srcIp = data[0][:8] … # Faire une selection avant des clés/IP for key in src_keys: response = s3_client.select_object_content( expression=“SELECT SUBSTR(obj._1, 1, 8), obj._2 FROM s3object as obj”) contents = response['Body'].read() for line in contents: line_count +=1 try: … Après (95s, $0.028) Avant (200s, $0.112) https://github.com/awslabs/lambda-refarch-mapreduce
  35. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Gestion des ressources Ajuster les ressources (jusqu’à 3GB) à la logique Exemple: Fonction qui calcule 1000 fois tous les nombres premiers <= 1 000 000 128 MB 11.722s $0.024628 256 MB 6.6789s $0.028035 512 MB 3.1949s $0.026830 1024 MB 1.4659s $0.024638
  36. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T “AWS Lambda Power Tuning” Optimiser votre Lambda et son coût github.com/alexcasalboni/aws-lambda-power-tuning Plutôt que deviner, tester !
  37. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Ma Lambda dans un VPC ? Besoin d’accéder à des ressources spécifiques du VPC Accédez-vous à des ressources sur internet Ne mettre pas votre fonction dans un VPC Mettez la fonction dans un sous-réseau privé Mettez la fonction dans un sous réseau avec une route NAT internet Oui Oui Non Non Avez-vous besoin d’un VPC?
  38. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Queue based Simple No event store Stream based Penser concurrence, pas TPS
  39. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Contrôle de la concurrence Concurrence est un pool de ressources partagé Utilise la concurrence par fonction Cela permet de réserver la capacité pour la fonction Cela permet aussi de limiter (max) la capacité par fonction Critique si on accède àRDS “Kill switch” – Remettre la concurrence à zéro en cas de soucis
  40. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Résilience: politique de rejeu Comprendre la politique de rejeu Synchrone pas de retry Asynchrone: rejeu 2 fois Streams rejeu tout le temps (risque de boucle infinite) Utiliser les Dead Letter Queues (DLQ) SQS ou SNS pour les rejeux RAPPEL: Les rejeux comptent comme des exécutions de la lambda
  41. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Reusable Content Serverless Security Workshop : https://github.com/aws-samples/aws-serverless- security-workshop Power Tuning Lambda : https://github.com/alexcasalboni/aws-lambda-power- tuning Serverless workshop : https://github.com/aws-samples/aws-serverless-airline- booking
  42. © 2019, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. S U M M I T Conclusion “No server is easier to manage than no server” - Werner Vogels, Amazon CTO Payer uniquement pour le trafic Appliquer le serverless en fonction de vos cas d’utilisation: • Web applications • Stream processing • Data lake Qu’allez-vous construire avec du serverless?