Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
Tout savoir sur AWS Lambda en 2019 pour les développeurs
Alexandre Pinhel – AWS, Solutions Architect
Radek Nevrtal – Architecte d’entreprise Transdev Corporate
M A P 3 0 1
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
AWS Lambda – les sorties depuis la création
?
*A date de fin 2018, sans compter les déploiements de nouvelles régions
2015 2016 2017 2018
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
Rappel - Applications serverlessServices (AWS ou autres)
Changement données
Requêtes web
Changement état
Evénements déclencheur
Fonction
Node.jsPythonJavaC#GoRubyRuntime API
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
Anatomie d’une fonction Lambda
Handler()Fonction exécutée à l’invocation
EventDonné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 implementreturn {
'statusCode': 200,'body': json.dumps('Hello World!')
}
© 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 dansune queue
3. La fonctionsupprime les
messages de la queue
2. Lambda interroge et traite les messages
Topic
MessageObject
© 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 renvoitles données du stream
Data
2. Invocation lambda
1. Chatbot besoin de clore le chat
Chatbot1. Horloged’événements
2. Invocation lambda
Event (time-based)
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
A W SC l o u d 9 AWS Toolkit
pour PyCharm
AWS Toolkitpour Intell iJ
AWS Toolkitpour VS
Code
Toolkits Open source toolkits
AWS Toolkits pour les IDEs
+IDEs
Nouveautés pour les développeurs – toolkits AWS
© 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
© 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
© 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
© 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 fonction sont partagées comme des variables environnement
/runtime API/invocation/next
/init/error /ID/error
/invocation/ID/response
/invocation/ID/error
bootstrapProcess events/headers
Clean up
Initialize and Invoke function
Response/Error handling
Lambda Functio
n
© 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
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
AWS Step FunctionsGestion 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
• Loggue l’état de chaque étape, si il y a un incident vous pouvez diagnostiquer et debugger les problèmes
TâchesChoix
Capture erreur
Tâchesparallèles
© 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
© 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 serviceStart
End
AWS Lambda
Start
End
Pas de fonctionsLambda
S U M M I T © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Transdev ESBAWS Serverless au premier plan
Radek NEVRTAL, Architecte d’entreprise Transdev Corporate
18
Présentation de la société Transdev
Transdev ESB | AWS Summit Paris 2019
6,7mdsde chiffre d’affaires
(4,1 Md€ hors France)
83 000collaborateurs,
dont 56 390conducteurs
43 270véhicules exploités
dont 26 616 véhicules propres
3,5milliards de voyageurs
transportés par an
20 pays
19
Objectif : Mise en place des référentiels de données et des flux de synchronisation en temps réel afin de réduire les double saisies
Transdev ESB | AWS Summit Paris 2019
ESB du marché
Critères du choix :
Couverture des besoins
Coût
Réutilisabilité
Monitoring
Facile à déployer
Contraintes :
Temps/Agilité
Scalabilité
Développement serverless
20
Architecture
Transdev ESB | AWS Summit Paris 2019
21
Les learnings
Transdev ESB | AWS Summit Paris 2019
Mise en place du socle
Déploiements
CoûtMonitoring
Ajout des nouvelles
fonctionnalités
Limiteslambdas
10 millions de lambdas/mois pour 26€/mois
Plusieurs déploiements par semaine, déploiement en minutes
Première interface avec socle en 2 mois
Plus besoin de monitoring technique
22
Le futur
Transdev ESB | AWS Summit Paris 2019
Continuer à évoluer le framework
ESB
Nouvelles plateformes régionales
Généraliser Lambda et serverless
Remplacement Dynamo DB par S3.Utilisation de Parameter storePossibilité d’alimenter en auto un Data Lake
En AustralieEn HollandeAux USA
Dans les projets des applications webDans les projets de mobilitéDans l’intégration technique
Merci !
S U M M I T © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
Utiliser un framework
AWSChalice
AWS Amplify
AWS SAM
AWS: Third-party:
Serverless Framework
SAM TemplateIndique à AWS CloudFormation que c’est un SAM template qu’il doittransformer
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 avecLe 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: nodejs8.10
Policies: AmazonDynamoDBReadOnlyAccess
Events:
GetHtml:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
ListTable:
Type: AWS::Serverless::SimpleTable
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
MyLambdaFunction:Type: AWS::Serverless::FunctionProperties:Handler: index.handlerRuntime: nodejs8.10AutoPublishAlias: !Ref ENVIRONMENTDeploymentPreference:Type: Linear10PercentEvery10MinutesAlarms:# A list of alarms that you want to monitor- !Ref AliasErrorMetricGreaterThanZeroAlarm- !Ref LatestVersionErrorMetricGreaterThanZeroAlarm
Hooks:# Validation Lambda functions that are run before & after traffic shiftingPreTraffic: !Ref PreTrafficLambdaFunctionPostTraffic: !Ref PostTrafficLambdaFunction
AWS SAM + Déploiements maîtrisés
© 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 trigger peut appeler cette Lambda
© 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.7Policies:
- AWSLambdaExecute # Managed Policy
- Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- dynamodb:GetItem
Resource: !GetAtt MyDynamoDBTable.Arn
© 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)
© 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 configurationSupporte les hiérarchiesEn clair ou chiffré avec AWS KMSPeut envoyer des notifications à Amazon SNS ou LambdaPeut être protégé avec IAMLes appels sont disponibles dans AWS CloudTrailPeut ajouter des tagsDisponible par API ou au travers des SDK
Utile pour vos variables d’environnement, gérer des secrets ou des "feature flags”
© 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 Pythonimport 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)
S U M M I T © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
Cycle de vie d’une requête
Bootstraple runtime
Démarre votrecode
Cold start
Warmstart
Téléchargevotre code
Démarre lecontainer
AWS optimise Vous optimisez
© 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
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
Code de fonction “efficace”
• Eviter les fonctions “fat”/monolithique• Contrôler les dépendances dans vos déploiements• Optimiser pour votre langage (ex: Node avec Browserfy, Minify)
• RAPPEL – Les containers Lambda sont réutilisés• Lazily load des variables en global• Ne charger pas si vous n’en avez pas besoin
• Séparer le Lambda handler de la logique• Utiliser les fonctions pour transformer pas
transporter
import boto3
client = None
def my_handler(event, context): if not client:
client = boto3.client("s3")# process
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
Gestion de puissance
Lambda expose seulement le contrôle de la mémoire
Ajuster la quantité de mémoire va ajuster le CPU et la bande passante réseau
© 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 logiqueExemple: Fonction qui calcule 1000 fois tous les nombres premiers<= 1 000 000
128 MB 11.722s $0.024628256 MB 6.6789s $0.028035512 MB 3.1949s $0.0268301024 MB 1.4659s $0.024638
© 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 !
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
Ma Lambda dans un VPC ?
Besoind’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?
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
VPCs & Résilience
TOUJOURS configurer un minimum de 2 Availability Zones
Donner à votre fonction Lambda leur propres subnets
Donner à vos subnets Lambda un range IP suffisant pour gérer la
scalabilité
Si vos fonctions ont besoin d’internet, vous avez besoin d’une NAT
(instance, gateway)
© 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 rejeuSynchrone pas de retryAsynchrone: rejeu 2 foisStreams rejeu tout le temps (risque de boucle infinie)
Utiliser les Dead Letter Queues (DLQ)SQS ou SNS pour les rejeux
RAPPEL: Les rejeux comptent comme des exécutions de la lambda
© 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.S U M M I T
RessourcesCustom runtime tutorial:https://docs.aws.amazon.com/lambda/latest/dg/runtimes-walkthrough.html
Toolkit for Pycharm:https://github.com/aws/aws-toolkit-jetbrains
DynamoDB Local:https://docs.aws.amazon.com/fr_fr/amazondynamodb/latest/developerguide/DynamoDBLocal.html
Step function Local:https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local.html
AWS Lambda Power Tuning:https://github.com/alexcasalboni/aws-lambda-power-tuning
S U M M I T © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.