Performance d'AWS Lambda : JavaScript vs Python vs Golang
Quelle langue utiliser pour AWS Lambda ?
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…
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
- SAM cli: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
- Installer Linux et outils
- Feuille de triche Golang
- Feuille de triche Bash
- Feuille de triche Python
- Popularité des langages de programmation et frameworks
- Espace Golang
- Alternatives à Beautiful Soup pour Go
- Génération de PDF en GO - Bibliothèques et exemples"