Ich habe Lambda mit einer Ruby-Implementierung verwendet. Ich habe mit der AWS SAM CLI entwickelt. Die Entwicklung selbst verlief reibungslos, aber als ich das AWS SDK zum Hinzufügen von Funktionen verwendete, wurde "sam local" sehr langsam. Ich fand heraus, dass es seltsam wäre, mit einer so einfachen Beispiel-App so langsam zu sein.
Klicken Sie hier für ein Beispielprojekt (https://github.com/suruseas/lamba-gemfile-test)
Das AWS SDK wird in der Lambda-Laufzeit für jede Umgebung installiert, sodass es nicht im Lambda-Bereitstellungspaket enthalten sein muss.
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html
Speziell für Ruby ** besteht keine Notwendigkeit, etwas wie "gem'aws-sdk ',' ~> 3 '" in die Gemfile ** zu schreiben! Es ist sehr unangenehm, wenn Sie die Gewohnheit haben, die Edelsteine zu schreiben, die Sie normalerweise in der Gemfile verwenden, aber es gibt kein Problem, da Sie Edelsteine benötigen können, die in globalen Edelsteinen so installiert sind, wie sie sind.
Die Größe des Pakets ändert sich stark, je nachdem, ob es in der Gemfile geschrieben ist oder nicht (das AWS SDK allein ist fast 23 MB groß), sodass der Unterschied groß ist.
Übrigens hat "sam local" vor der Korrektur kaum funktioniert, also nur der Vergleich. Nach der Bereitstellung funktionierte es nicht ohne eine signifikante Erhöhung des Speichers und des Timeouts von Lambda.
Es dauert eine Weile, Init Duration: 54544.65 ms
.
$ 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\"}"}
Verbessert mit Init Duration: 2266.99 ms
!
$ 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\"}"}
Wenn Sie Lambda verwenden, müssen Sie extra bezahlen, wenn Sie nicht auf Größe und Leistung achten. Leichte Verarbeitungszeit und Packungsgröße. Ich möchte es durch die Verwendung von Lambda Division und AWS Lambda Layers unterstützen.
Recommended Posts