Performance d'AWS Lambda : JavaScript vs Python vs Golang

Quelle langue utiliser pour AWS Lambda ?

Sommaire

Nous pouvons écrire une fonction lambda pour le déploiement sur AWS dans plusieurs langages. Commençons par comparer les performances de fonctions (presque vides) écrites en JavaScript, Python et Golang…

AWS Lambda Function logo

TL;DR

En résumé :

Langage Durée facturée Warm-up Durée facturée Taille de mémoire Mémoire maximale utilisée
Python 197 ms 2 ms 128 MB 32 MB
Python S3 516 ms 35 ms 128 MB 77 MB
JavaScript 2 ms 2 ms 128 MB 63 MB
JavaScript S3 120 ms 72 ms 128 MB 89 MB
Golang 11 ms 1 ms 128 MB 20 MB
Golang S3 30 ms 29 ms 128 MB 38 MB
  • Le Python a la durée de réchauffement la plus longue sur 128 GB de RAM,
  • Le JavaScript est le plus lent globalement
  • Le Golang est le meilleur des trois, mais pas de manière significative

Une option intéressante est d’accélérer la fonction lambda Python en ajoutant plus de mémoire, et en même temps le CPU. Cela ne réduira que le temps de réchauffement, je pense. L’appel à S3 ne deviendra pas moins latent.

Dans le test synthétique des nombres premiers d’AWS - le coût d’exécution de la lambda Python est le même que l’utilisation de 128 MB et 512 MB de limite de RAM, et la performance de la configuration de 512 MB est significativement plus rapide.

https://docs.aws.amazon.com/lambda/latest/operatorguide/computing-power.html

Qu’est-ce que le AWS SAM

Nous utilisons SAM pour tester différentes fonctions lambda ici.

AWS SAM est un Serverless Application Model.

Le projet AWS SAM inclut le modèle AWS SAM et le code de la fonction. Le modèle SAM décrit comment déployer, exécuter et tester la fonction lambda, les permissions et d’autres paramètres importants pour créer le stack CloudFormation.

Pour l’utiliser, nous avons besoin de aws cli et de sam cli.

Installer AWS cli

Comment faire localement : Installer AWS CLI dans le document de réinstallation de Linux

Ou sur le site d’AWS : https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

Installer SAM cli

En gros - Télécharger le programme d’installation de SAM cli depuis le site d’AWS, décompresser et installer

wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
sudo ./sam-installation/install

# vérifier que sam est installé
sam --version

Nettoyer les fichiers d’installation

rm -rf sam-installation
rm aws-sam-cli-linux-x86_64.zip

Créer les fonctions lambda

Appeler trois fois le script

sam init

et sélectionner chaque fois le modèle hello-world, mais différents langages, nous créons 3 applications sam

Fonction lambda basée sur Python 3.12

la sortie de sam init :

    -----------------------
    Génération de l'application :
    -----------------------
    Nom : t1-py
    Runtime : python3.12
    Architectures : x86_64
    Gestionnaire de dépendances : pip
    Modèle d'application : hello-world
    Répertoire de sortie : .
    Fichier de configuration : t1-py/samconfig.toml
    
    Les étapes suivantes peuvent être trouvées dans le fichier README à t1-py/README.md
        

Commandes que vous pouvez utiliser ensuite
=========================
[*] Créer un pipeline : cd t1-py && sam pipeline init --bootstrap
[*] Valider le modèle SAM : cd t1-py && sam validate
[*] Tester la fonction dans le cloud : cd t1-py && sam sync --stack-name {stack-name} --watch

Fonction lambda basée sur JavaScript et nodejs20.x

la sortie de sam init :

    -----------------------
    Génération de l'application :
    -----------------------
    Nom : t2-js
    Runtime : nodejs20.x
    Architectures : x86_64
    Gestionnaire de dépendances : npm
    Modèle d'application : hello-world
    Répertoire de sortie : .
    Fichier de configuration : t2-js/samconfig.toml
    
    Les étapes suivantes peuvent être trouvées dans le fichier README à t2-js/README.md
...

Fonction lambda basée sur Golang (image aws al2023)

la sortie de sam init :

    -----------------------
    Génération de l'application :
    -----------------------
    Nom : t3-go
    Runtime : go (provided.al2023)
    Architectures : x86_64
    Gestionnaire de dépendances : mod
    Modèle d'application : hello-world
    Répertoire de sortie : .
    Fichier de configuration : t3-go/samconfig.toml
    
    Les étapes suivantes peuvent être trouvées dans le fichier README à t3-go/README.md

Construire, tester, déployer et exécuter - fonction lambda basée sur Python

tester localement

sam build --use-container

la sortie affiche à la fin :

Commandes que vous pouvez utiliser ensuite
=========================
[*] Valider le modèle SAM : sam validate
[*] Appeler la fonction : sam local invoke
[*] Tester la fonction dans le cloud : sam sync --stack-name {{stack-name}} --watch
[*] Déployer : sam deploy --guided

après avoir exécuté trois fois

sam local invoke

la sortie que nous voyons :

Rapport RequestId: 3b36575a-629d-40ba-adb7-018bdb8cae63  Durée d'initialisation : 0,09 ms  Durée : 46,95 ms      Durée facturée : 47 ms  Taille de mémoire : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: e1233b8a-99c6-49d9-ab91-f02408a5ec6f  Durée d'initialisation : 0,07 ms  Durée : 44,56 ms      Durée facturée : 45 ms  Taille de mémoire : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: 34772494-39ff-457d-a1c1-16cd5e177b42  Durée d'initialisation : 0,02 ms  Durée : 26,35 ms      Durée facturée : 27 ms  Taille de mémoire : 128 MB     Mémoire maximale utilisée : 128 MB

si nous ajoutons un appel de lecture S3, la sortie sera différente

...
Rapport RequestId: 158b806c-852d-4f6b-ab28-cdd6e0868fa1  Durée d'initialisation : 0,02 ms  Durée : 675,64 ms     Durée facturée : 676 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: d4cc689c-f944-49fa-9254-555266816b97  Durée d'initialisation : 0,79 ms  Durée : 465,80 ms     Durée facturée : 466 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: b8d30096-cd93-4787-84d7-e8f52d7e2e13  Durée d'initialisation : 0,02 ms  Durée : 447,83 ms     Durée facturée : 448 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB

Ok chaque appel prend 1/2 seconde, et la mémoire utilisée est de 128 MB

tester sur aws

sam build --use-container
sam deploy --guided

Le cli SAM demandera le nom du stack CloudFormation, puis une confirmation, puis déployera notre fonction sur AWS. La dernière page de la sortie sam ressemblera à quelque chose comme

Aperçu des changements de CloudFormation avant le déploiement
======================================================
Déployer ce changement de stack ? [y/N]: Y

2024-08-17 20:19:30 - En attente de la création/mise à jour de la stack

Événements CloudFormation de l'opération de stack (actualisation toutes les 5,0 secondes)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Statut de la ressource                                 Type de ressource                                   Identifiant logique de la ressource                              Raison du statut de la ressource                         
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
EN_COURS_DE_CREATION                             AWS::CloudFormation::Stack                     t1-py                                          Initialement lancé par l'utilisateur                               
EN_COURS_DE_CREATION                             AWS::IAM::Role                                 HelloWorldFunctionRole                         -                                            
EN_COURS_DE_CREATION                             AWS::IAM::Role                                 HelloWorldFunctionRole                         Création de la ressource initiée                  
CREATION_TERMINEE                                AWS::IAM::Role                                 HelloWorldFunctionRole                         -                                            
EN_COURS_DE_CREATION                             AWS::Lambda::Function                          HelloWorldFunction                             -                                            
EN_COURS_DE_CREATION                             AWS::Lambda::Function                          HelloWorldFunction                             Création de la ressource initiée                  
CREATION_TERMINEE                                AWS::Lambda::Function                          HelloWorldFunction                             -                                            
EN_COURS_DE_CREATION                             AWS::ApiGateway::RestApi                       ServerlessRestApi                              -                                            
EN_COURS_DE_CREATION                             AWS::ApiGateway::RestApi                       ServerlessRestApi                              Création de la ressource initiée                  
CREATION_TERMINEE                                AWS::ApiGateway::RestApi                       ServerlessRestApi                              -                                            
EN_COURS_DE_CREATION                             AWS::Lambda::Permission                        HelloWorldFunctionHelloWorldPermissionProd     -                                            
EN_COURS_DE_CREATION                             AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          -                                            
EN_COURS_DE_CREATION                             AWS::Lambda::Permission                        HelloWorldFunctionHelloWorldPermissionProd     Création de la ressource initiée                  
CREATION_TERMINEE                                AWS::Lambda::Permission                        HelloWorldFunctionHelloWorldPermissionProd     -                                            
EN_COURS_DE_CREATION                             AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          Création de la ressource initiée                  
CREATION_TERMINEE                                AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          -                                            
EN_COURS_DE_CREATION                             AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     -                                            
EN_COURS_DE_CREATION                             AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     Création de la ressource initiée                  
CREATION_TERMINEE                                AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     -                                            
CREATION_TERMINEE                                AWS::CloudFormation::Stack                     t1-py                                          -                                            
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sorties CloudFormation du stack déployé
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sorties                                                                                                                                                                                   
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
...
Clé                 HelloWorldApi                                                                                                                                                         
Description         URL du point de terminaison de l'API Gateway pour la phase Prod de la fonction Hello World                                                                                                      
Valeur               https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/                                                                                               
...-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Voyez la clé HelloWorldApi avec la description URL du point de terminaison de l'API Gateway pour la phase Prod de la fonction Hello World ? Il s’agit de notre URL publique :

https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/  

mais commençons par lancer notre écouteur de logs d’abord :

sam logs -n HelloWorldFunction --stack-name "t1-py" --tail

et puis, pendant que l’écouteur de logs est en cours d’exécution, appelez dans une autre fenêtre de terminal :

curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/

sortie :

2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.468000 RAPPORT RequestId: 2e35fcf9-4d4b-4ced-962e-923adeddcbaa  Durée : 199,56 ms     Durée facturée : 200 ms Mémoire Size : 128 MB Mémoire maximale utilisée : 56 MB
...break...
2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.909000 RAPPORT RequestId: dd200d9d-cf35-4813-a243-ca8cf7435908  Durée : 194,60 ms     Durée facturée : 195 ms Mémoire Size : 128 MB Mémoire maximale utilisée : 56 MB
...break...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:01.610000 RAPPORT RequestId: afae88d1-3873-40a3-8b82-caa7019ca45e  Durée : 1,94 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 32 MB  Durée d'initialisation : 117,62 ms
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:03.292000 RAPPORT RequestId: d7011c87-e6a2-4d76-bb39-4c32b754b991  Durée : 1,71 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:06.905000 RAPPORT RequestId: 0eab1866-b11f-4a26-8234-be07f47ecb49  Durée : 1,62 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:12.696000 RAPPORT RequestId: f0cc5b4b-f3c3-49d5-9708-fce265581ed2  Durée : 1,51 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:13.202000 RAPPORT RequestId: 40367789-27c0-419b-8483-cf054978e9b6  Durée : 1,51 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:13.552000 RAPPORT RequestId: 6d166356-5a6c-44c7-b5dd-5c2808340b79  Durée : 1,38 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 32 MB

avec appel à S3 - nous parlons ici

2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:54:55.322000 RAPPORT RequestId: d97fd1cd-d9ef-4d16-adcb-514fa65ca6f8  Durée : 513,99 ms     Durée facturée : 514 ms Mémoire Size : 128 MB Mémoire maximale utilisée : 77 MB
...
une pause
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.063000 RAPPORT RequestId: e6e6884d-d6b6-4dc7-aede-f3863f3b331d  Durée : 519,35 ms     Durée facturée : 520 ms Mémoire Size : 128 MB Mémoire maximale utilisée : 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.202000 RAPPORT RequestId: 91eeaca0-c983-4e99-9608-36948511bd27  Durée : 23,95 ms      Durée facturée : 24 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.662000 RAPPORT RequestId: d7035256-53f8-463c-93fd-f5de608f47a6  Durée : 33,55 ms      Durée facturée : 34 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:03.082000 RAPPORT RequestId: a2e338b3-f18e-4644-8f6d-2ab151421996  Durée : 21,50 ms      Durée facturée : 22 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:03.562000 RAPPORT RequestId: 111665a1-f43c-488b-bc02-cd203fef478f  Durée : 42,58 ms      Durée facturée : 43 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 77 MB

Taille de mémoire : 77 MB et Durée facturée ~35 ms… Durée de réchauffement 1/2 seconde

nettoyage du stack CloudFormation d’AWS

sam delete --stack-name "t1-py"

Construire, tester, déployer et exécuter - fonction lambda basée sur JavaScript

JS local

construire et exécuter localement

sam build
sam local invoke

produit

Rapport RequestId: 9e3c0a43-6432-4cc7-babf-f591773e5315  Durée d'initialisation : 0,05 ms  Durée : 126,34 ms     Durée facturée : 127 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
Rapport RequestId: 2856e8f1-166f-4a90-a094-d575ef00ff69  Durée d'initialisation : 0,02 ms  Durée : 43,73 ms      Durée facturée : 44 ms  Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
Rapport RequestId: f1156bd5-dd9f-4c1c-b65d-68c04df5a987  Durée d'initialisation : 0,02 ms  Durée : 42,79 ms      Durée facturée : 43 ms  Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB

durées d’appel à S3 localement :

Rapport RequestId: 06c4a5a0-6f1a-4e09-9518-cf706d08c319  Durée d'initialisation : 0,13 ms  Durée : 280,33 ms     Durée facturée : 281 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: 4393e8bd-c59b-42e5-83b5-1729d0fb4d8f  Durée d'initialisation : 0,08 ms  Durée : 270,42 ms     Durée facturée : 271 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: 90979693-7245-4f88-9f6b-070be83f75df  Durée d'initialisation : 0,05 ms  Durée : 431,86 ms     Durée facturée : 432 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB

JS sur aws

Déployer et accepter ce que sam demande et permettre les appels non authentifiés à nos fonctions lambda

sam deploy --guided
# maintenant écouter les logs
sam logs -n HelloWorldFunction --stack-name t2-js --tail
# ou
sam logs -n HelloWorldS3Function --stack-name t2-js --tail

et après avoir effectué des appels curl dans une autre console, les logs

2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:38.831000 RAPPORT RequestId: 24e86600-e316-4678-81db-41eafff81aa0  Durée : 4,92 ms       Durée facturée : 5 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 62 MB  Durée d'initialisation : 139,82 ms
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:47.451000 RAPPORT RequestId: 0d269d7f-61f6-4b48-b3c2-6f83aaba5f45  Durée : 2,58 ms       Durée facturée : 3 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 62 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:58.622000 RAPPORT RequestId: f1bd0e5a-d1d0-4136-9b02-6fba4dcc9a70  Durée : 1,34 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:59.089000 RAPPORT RequestId: baa791a7-4f9c-41be-b516-81213bc7a365  Durée : 1,44 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:59.966000 RAPPORT RequestId: ea2a1515-1188-4a44-956f-91f2fc97491f  Durée : 1,46 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:39:00.428000 RAPPORT RequestId: 0f536ec5-26cb-42b9-beaa-045984b8c468  Durée : 1,45 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 63 MB

Très bien. pas beaucoup de temps perdu à faire rien. mais ne s’endort pas non plus.

Performance de la fonction lambda JavaScript lisant depuis un bucket S3

2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:45.155000 RAPPORT RequestId: c4630419-4502-467c-9cda-c5087d6b2743  Durée : 1051,97 ms    Durée facturée : 1052 ms        Mémoire Size : 128 MB Mémoire maximale utilisée : 88 MB  Durée d'initialisation : 411,76 ms
...pause...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:52.195000 RAPPORT RequestId: 4b881f2b-4b30-4890-afc2-b7299b6397b3  Durée : 259,87 ms     Durée facturée : 260 ms Mémoire Size : 128 MB Mémoire maximale utilisée : 89 MB
...pause...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:58.455000 RAPPORT RequestId: 77f4d820-2f2e-4190-a1e3-bc4821ccdb9b  Durée : 165,44 ms     Durée facturée : 166 ms Mémoire Size : 128 MB Mémoire maximale utilisée : 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:03.095000 RAPPORT RequestId: 41ce9fd8-aaf4-46c4-a827-0a45592041c0  Durée : 63,74 ms      Durée facturée : 64 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:03.695000 RAPPORT RequestId: 9494f176-3818-4fb3-a581-857f1eb2df23  Durée : 73,16 ms      Durée facturée : 74 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:04.315000 RAPPORT RequestId: 528c909f-4a08-415e-a713-e3d9e9e4d615  Durée : 87,44 ms      Durée facturée : 88 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:04.835000 RAPPORT RequestId: 9b636429-56f5-4974-afe9-e53e786adb61  Durée : 55,62 ms      Durée facturée : 56 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:05.415000 RAPPORT RequestId: d4c298df-b237-4605-894f-fde05fe0461a  Durée : 69,88 ms      Durée facturée : 70 ms  Mémoire Size : 128 MB Mémoire maximale utilisée : 89 MB

Nettoyage AWS js

suppression…

sam delete --stack-name t2-js

Construire, tester, déployer et exécuter - fonction lambda basée sur Golang

Test de la fonction lambda Golang locale

Pour être précis - faire des appels de test, pas exécuter des tests unitaires.

La commande sam build se trouve dans le Makefile. Donc nous exécutons :

make

exécuter une fonction unique

sam local invoke HelloWorldFunction --event events/event.json
sam local invoke HelloWorldFunction --event events/event.json
sam local invoke HelloWorldFunction --event events/event.json

sam local invoke HelloWorldS3Function --event events/event.json
sam local invoke HelloWorldS3Function --event events/event.json
sam local invoke HelloWorldS3Function --event events/event.json

Option 2 : maintenant démarrer le serveur local :

sam local start-api

la sortie :

maintenant dans une autre fenêtre de terminal :

curl http://localhost:3000/hello
curl http://localhost:3000/hello
curl http://localhost:3000/hello

curl http://localhost:3000/hellos3
curl http://localhost:3000/hellos3
curl http://localhost:3000/hellos3

la sortie d’appel local simple à la lambda basée sur Golang :

Rapport RequestId: 54cc3271-7f04-44a3-8d91-d5d69d2428ea  Durée d'initialisation : 0,03 ms  Durée : 2,24 ms       Durée facturée : 3 ms   Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: c753bdf9-1af0-4b40-9516-5fb2ad96ba00  Durée : 0,29 ms       Durée facturée : 1 ms   Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: edceb310-e6e9-4f0a-bd6e-58afd40e9b70  Durée : 0,28 ms       Durée facturée : 1 ms   Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB

la sortie d’appel local “s3” à la lambda basée sur Golang :

Rapport RequestId: 1556e298-a17a-4d45-9fdc-b7f62118c246  Durée d'initialisation : 0,06 ms  Durée : 142,76 ms     Durée facturée : 143 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: e4638fb4-52f4-4086-b673-c9de0f02d3f7  Durée : 86,75 ms      Durée facturée : 87 ms  Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB
...
Rapport RequestId: b1bdcbf8-06f8-4605-a7da-d34f41198811  Durée : 105,07 ms     Durée facturée : 106 ms Mémoire Size : 128 MB     Mémoire maximale utilisée : 128 MB

la durée de 1 ms semble bonne, mais Mémoire Size : 128 MB ? Pourquoi ? Devrait être comme 12 MB ? Probablement que c’est le minimum qu’ils ont.

Test de la lambda Golang sur AWS

sam deploy --guided

démarrer l’écouteur de logs

sam logs -n HelloWorldFunction --stack-name t3-go --tail

et appeler la fonction trois fois :

curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/

dans les logs nous voyons :

2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:02.908000 RAPPORT RequestId: 358b5762-dad7-4380-a83f-e21349fae20b  Durée : 11,71 ms      Durée facturée : 70 ms     Mémoire Size : 128 MB     Mémoire maximale utilisée : 20 MB  Durée d'initialisation : 57,52 ms
...pause...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:07.404000 RAPPORT RequestId: 3051d741-504a-49ae-95b3-077628b4b929  Durée : 0,99 ms       Durée facturée : 1 ms      Mémoire Size : 128 MB     Mémoire maximale utilisée : 20 MB
...pause...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:11.923000 RAPPORT RequestId: 51c38ca9-920d-4f30-be75-a1a44538c9ee  Durée : 1,02 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 20 MB
...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:13.202000 RAPPORT RequestId: 40367789-27c0-419b-8483-cf054978e9b6  Durée : 1,51 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 20 MB
...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:13.552000 RAPPORT RequestId: 6d166356-5a6c-44c7-b5dd-5c2808340b79  Durée : 1,38 ms       Durée facturée : 2 ms   Mémoire Size : 128 MB Mémoire maximale utilisée : 20 MB

nettoyage du stack CloudFormation d’AWS

sam delete --stack-name "t3-go"

Liens utiles