J'utilisais Lambda dans une implémentation Ruby. Je développais en utilisant l'AWS SAM CLI. Le développement lui-même s'est bien déroulé, mais lorsque j'ai changé pour utiliser le kit AWS SDK pour ajouter des fonctionnalités, sam local
est devenu très lent. J'ai découvert qu'il serait étrange d'être aussi lent avec un exemple d'application aussi simple.
Cliquez ici pour un exemple de projet (https://github.com/suruseas/lamba-gemfile-test)
Le kit SDK AWS est installé dans l'environnement d'exécution Lambda pour chaque environnement, il n'a donc pas besoin d'être inclus dans le package de déploiement Lambda.
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html
Surtout pour Ruby, ** pas besoin d'écrire "gem'aws-sdk ',' ~> 3 '" dans le Gemfile **! C'est très désagréable si vous avez l'habitude d'écrire les gemmes que vous utilisez normalement dans le Gemfile, mais il n'y a pas de problème car vous pouvez avoir besoin de gemmes installées dans des gemmes globales telles quelles.
La taille du package change considérablement selon qu'il est écrit ou non dans Gemfile (le SDK AWS seul est proche de 23 Mo), la différence est donc importante.
Au fait, avant la correction, sam local
fonctionnait à peine, donc seulement la comparaison. Après le déploiement, cela n'a pas fonctionné sans une augmentation significative de la mémoire et du délai d'expiration de Lambda.
ʻInit Duration: 54544,65 ms`, ce qui prend un temps considérable.
$ sam local invoke HelloWorldFunction --event events/event.json --env-vars env.json
Invoking app.lambda_handler (ruby2.5)
Fetching lambci/lambda:ruby2.5 Docker container image......
Mounting /home/ubuntu/environment/test/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
START RequestId: 22ddc38d-745a-1d37-0ce9-324760f75ec4 Version: $LATEST
END RequestId: 22ddc38d-745a-1d37-0ce9-324760f75ec4
REPORT RequestId: 22ddc38d-745a-1d37-0ce9-324760f75ec4 Init Duration: 54544.65 ms Duration: 801.49 ms Billed Duration: 900 ms Memory Size: 128 MBMax Memory Used: 60 MB
{"statusCode":200,"body":"{\"message\":\"t2.micro\"}"}
ʻInit Duration: 2266.99 ms` et amélioré!
$ sam local invoke HelloWorldFunction --event events/event.json --env-vars env.json
Invoking app.lambda_handler (ruby2.5)
Fetching lambci/lambda:ruby2.5 Docker container image......
Mounting /home/ubuntu/environment/test/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
START RequestId: a81dffd9-915d-13db-3ed7-4fe0e3b63464 Version: $LATEST
END RequestId: a81dffd9-915d-13db-3ed7-4fe0e3b63464
REPORT RequestId: a81dffd9-915d-13db-3ed7-4fe0e3b63464 Init Duration: 2266.99 ms Duration: 557.91 ms Billed Duration: 600 ms Memory Size: 128 MBMax Memory Used: 58 MB
{"statusCode":200,"body":"{\"message\":\"t2.micro\"}"}
Si vous utilisez Lambda, vous devrez payer un supplément si vous ne faites pas attention à la taille et aux performances. Temps de traitement léger et taille de l'emballage. Je souhaite le soutenir en utilisant la division Lambda et les couches AWS Lambda.
Recommended Posts