Als ich versuchte, das AWS SDK mit Ruby + Lambda zu verwenden, war "sam local" durcheinander.

Was ist passiert

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)

Nur eine kurze Schlussfolgerung

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.

Vergleichen Sie, wenn "gem'aws-sdk ',' ~> 3 '" in Gemfile geschrieben (vor der Änderung) und gelöscht (nach der Änderung) wird.

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.

Vor der Korrektur

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\"}"}

Überarbeitet

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\"}"}

Schließlich

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

Als ich versuchte, das AWS SDK mit Ruby + Lambda zu verwenden, war "sam local" durcheinander.
[Ruby] Dies ist die Lösung. Wann sollte ich Instanzvariablen verwenden?
Ich habe versucht, den Zugriff von Lambda → Athena mit AWS X-Ray zu visualisieren
Wenn ich versuche, mich bei devise anzumelden, wird automatisch zu root_path umgeleitet
Verwendung des Java-Frameworks mit AWS Lambda! ??
Bis Sie ein Java-Programm mit dem für Windows lokalen AWS SDK ausführen
Eine Warnung wird angezeigt, wenn versucht wird, eine große Ganzzahl mit den speziellen Variablen $ 1, $ 2, $ 3 ... zu verwenden.
Die Geschichte, nach der ich beim Einrichten von STS süchtig war
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Auf Anforderung wird der Zugriff auf die Ressource beim Push mit Docker verweigert
Versuchen Sie, SlackBot mit Ruby x Sinatra auf AWS Lambda auszuführen
Beim Versuch, PowerMock mit JUnit zu verwenden, wurde ein IllegalAccessError angezeigt
Was ich getan habe, als die DB nicht mit Docker-Compose gestartet wurde
Ich erhalte einen Ruby-Versionsfehler, wenn ich versuche, Rails zu starten.
[IOS] Was tun, wenn das Bild mit einer Farbe gefüllt ist?
Probleme, denen ich beim Erstellen der Digdag-Umgebung mit Docker verfallen war
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby mit Wiederholung zu lösen.
Beachten Sie Folgendes, wenn Sie Apache PDFBox® mit AWS Lambda verwenden
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
Hinweise zur Vorgehensweise bei der Einrichtung von EC2 mit t2.micro
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Als ich zu Docker Hub wechselte, wurde mir der Zugriff auf die Ressource verweigert
Initialisieren Sie das Ruby-Array mit 0 für Java, dh setzen Sie den Standardwert auf 0
[Eclipse] Ich möchte die Abschlussfunktion verwenden, aber ich möchte es schaffen, den Abschluss mit einem Leerzeichen zu bestätigen
Turbolinks: Ich möchte das Problem lösen, dass JS nicht richtig angezeigt wird, es sei denn, es wird beim Übergang mit link_to neu geladen
Sie können dies sofort mit Serverless Framework Serverless mit AWS tun (API + Lambda [Java] ist einfach einzurichten).