Wydajność AWS Lambda: JavaScript vs Python vs Golang
Jaki język należy użyć dla AWS Lambda?
Możemy napisać funkcję lambda do wdrażania na AWS w kilku językach. Porównajmy wydajność (prawie pustych) funkcji napisanych w JavaScript, Pythonie i Golang…
TL;DR
Krótko mówiąc:
Język | Billed Duration Warm-up | Billed Duration | Rozmiar pamięci | Maksymalny rozmiar pamięci |
---|---|---|---|---|
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 |
- Python ma najdłuższy czas rozgrzewania przy 128 GB RAM,
- JavaScript jest najwolniejszy ogólnie
- Golang jest najlepszy spośród trzech, ale nie znacząco
Ciekawa opcja to przyspieszenie funkcji lambda w Pythonie poprzez dodanie więcej pamięci, i jednocześnie procesora. Pomyślałem, że tylko zmniejszy czas rozgrzewania, ale wywołanie do S3 nie stanie się mniej opóźnione.
W syntetycznym teście liczb pierwszych
przez AWS - koszt uruchamiania Pythona lambda jest taki sam jak przy użyciu 128MB i 512MB limitu RAM,
a wydajność konfiguracji 512MB jest znacznie szybsza.
https://docs.aws.amazon.com/lambda/latest/operatorguide/computing-power.html
Co to jest AWS SAM
Używamy SAM do testowania różnych funkcji lambda tutaj.
AWS SAM to Serverless Application Model.
Projekt AWS SAM obejmuje szablon AWS SAM i kod funkcji. Szablon SAM opisuje, jak wdrażać, uruchamiać i testować funkcję lambda, uprawnienia i inne ważne parametry dla tworzenia stosu CloudFormation.
Aby go użyć, potrzebujemy aws cli
i sam cli
.
Zainstaluj AWS cli
Jak to zrobić lokalnie: Zainstaluj AWS CLI w dokumentacji Reinstall linux
Lub na stronie AWS: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
Zainstaluj SAM cli
Podstawowo - Pobierz zip z instalatorem SAM cli z strony AWS, rozpakuj i zainstaluj
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
# sprawdź, czy sam jest zainstalowany
sam --version
Wyczyść pliki instalacyjne
rm -rf sam-installation
rm aws-sam-cli-linux-x86_64.zip
Tworzenie funkcji lambda
Wywołując trzykrotnie skrypt
sam init
i wybierając za każdym razem szablon hello-world, ale różne języki, tworzymy 3 aplikacje sam
Funkcja lambda oparta na Pythonie 3.12
wynik sam init
:
-----------------------
Generating application:
-----------------------
Name: t1-py
Runtime: python3.12
Architectures: x86_64
Dependency Manager: pip
Application Template: hello-world
Output Directory: .
Configuration file: t1-py/samconfig.toml
Następne kroki można znaleźć w pliku README w t1-py/README.md
Komendy, które możesz wykonać dalej
=========================
[*] Utwórz pipeline: cd t1-py && sam pipeline init --bootstrap
[*] Walidacja szablonu SAM: cd t1-py && sam validate
[*] Testuj funkcję w chmurze: cd t1-py && sam sync --stack-name {stack-name} --watch
Funkcja lambda oparta na JavaScript i nodejs20.x
wynik sam init
:
-----------------------
Generating application:
-----------------------
Name: t2-js
Runtime: nodejs20.x
Architectures: x86_64
Dependency Manager: npm
Application Template: hello-world
Output Directory: .
Configuration file: t2-js/samconfig.toml
Następne kroki można znaleźć w pliku README w t2-js/README.md
...
Funkcja lambda oparta na Golang (aws obraz al2023)
wynik sam init
:
-----------------------
Generating application:
-----------------------
Name: t3-go
Runtime: go (provided.al2023)
Architectures: x86_64
Dependency Manager: mod
Application Template: hello-world
Output Directory: .
Configuration file: t3-go/samconfig.toml
Następne kroki można znaleźć w pliku README w t3-go/README.md
Budowa, testowanie, wdrażanie i wykonywanie - funkcja lambda oparta na Pythonie
test lokalnie
sam build --use-container
wynik pokazuje na końcu:
Komendy, które możesz wykonać dalej
=========================
[*] Walidacja szablonu SAM: sam validate
[*] Wywołaj funkcję: sam local invoke
[*] Testuj funkcję w chmurze: sam sync --stack-name {{stack-name}} --watch
[*] Wdróż: sam deploy --guided
po trzykrotnym uruchomieniu
sam local invoke
wynik, który widzimy:
REPORT RequestId: 3b36575a-629d-40ba-adb7-018bdb8cae63 Init Duration: 0.09 ms Duration: 46.95 ms Billed Duration: 47 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: e1233b8a-99c6-49d9-ab91-f02408a5ec6f Init Duration: 0.07 ms Duration: 44.56 ms Billed Duration: 45 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: 34772494-39ff-457d-a1c1-16cd5e177b42 Init Duration: 0.02 ms Duration: 26.35 ms Billed Duration: 27 ms Memory Size: 128 MB Max Memory Used: 128 MB
jeśli dodamy wywołanie odczytu z S3, wynik będzie inny
...
REPORT RequestId: 158b806c-852d-4f6b-ab28-cdd6e0868fa1 Init Duration: 0.02 ms Duration: 675.64 ms Billed Duration: 676 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: d4cc689c-f944-49fa-9254-555266816b97 Init Duration: 0.79 ms Duration: 465.80 ms Billed Duration: 466 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: b8d30096-cd93-4787-84d7-e8f52d7e2e13 Init Duration: 0.02 ms Duration: 447.83 ms Billed Duration: 448 ms Memory Size: 128 MB Max Memory Used: 128 MB
Ok, każde wywołanie trwa 1/2 sekundy, a RAM używany to 128 MB
test na aws
sam build --use-container
sam deploy --guided
SAM cli zapyta o nazwę stosu CloudFormation, potem o potwierdzenie, a potem wdroży naszą funkcję na AWS. Ostatnia strona wyjścia sam będzie wyglądać mniej więcej tak:
Przewiaryjanie zmiany stosu CloudFormation przed wdrożeniem
======================================================
Wdrożyć tę zmianę? [y/N]: Y
2024-08-17 20:19:30 - Oczekiwanie na ukończenie tworzenia/aktualizacji stosu
Zdarzenia CloudFormation z operacji stosu (odśwież co 5,0 sekund)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Stan zasobu Typ zasobu Logiczna nazwa zasobu Powód stanu zasobu
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS AWS::CloudFormation::Stack t1-py Inicjowane przez użytkownika
CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole -
CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole Inicjowanie tworzenia zasobu
CREATE_COMPLETE AWS::IAM::Role HelloWorldFunctionRole -
CREATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction -
CREATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction Inicjowanie tworzenia zasobu
CREATE_COMPLETE AWS::Lambda::Function HelloWorldFunction -
CREATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi -
CREATE_IN_PROGRESS AWS::ApiGateway::RestApi ServerlessRestApi Inicjowanie tworzenia zasobu
CREATE_COMPLETE AWS::ApiGateway::RestApi ServerlessRestApi -
CREATE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd -
CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d -
CREATE_IN_PROGRESS AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd Inicjowanie tworzenia zasobu
CREATE_COMPLETE AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd -
CREATE_IN_PROGRESS AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d Inicjowanie tworzenia zasobu
CREATE_COMPLETE AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d -
CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage -
CREATE_IN_PROGRESS AWS::ApiGateway::Stage ServerlessRestApiProdStage Inicjowanie tworzenia zasobu
CREATE_COMPLETE AWS::ApiGateway::Stage ServerlessRestApiProdStage -
CREATE_COMPLETE AWS::CloudFormation::Stack t1-py -
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Wyjścia z wdrożonego stosu CloudFormation
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Wyjścia
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
...
Klucz HelloWorldApi
Opis Adres URL punktu końcowego API Gateway dla etapu Prod dla funkcji Hello World
Wartość https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
...-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Zauważ klucz HelloWorldApi
z opisem Adres URL punktu końcowego API Gateway dla etapu Prod dla funkcji Hello World
? Tam jest nasz publiczny adres URL:
https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
ale najpierw uruchommy nasłuch logów:
sam logs -n HelloWorldFunction --stack-name "t1-py" --tail
a potem, gdy nasłuch logów działa, wywołajmy w innym oknie terminala:
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/
wyjście:
2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.468000 REPORT RequestId: 2e35fcf9-4d4b-4ced-962e-923adeddcbaa Duration: 199.56 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 56 MB
...break...
2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.909000 REPORT RequestId: dd200d9d-cf35-4813-a243-ca8cf7435908 Duration: 194.60 ms Billed Duration: 195 ms Memory Size: 128 MB Max Memory Used: 56 MB
...break...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:01.610000 REPORT RequestId: afae88d1-3873-40a3-8b82-caa7019ca45e Duration: 1.94 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB Init Duration: 117.62 ms
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:03.292000 REPORT RequestId: d7011c87-e6a2-4d76-bb39-4c32b754b991 Duration: 1.71 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:06.905000 REPORT RequestId: 0eab1866-b11f-4a26-8234-be07f47ecb49 Duration: 1.62 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:12.696000 REPORT RequestId: f0cc5b4b-f3c3-49d5-9708-fce265581ed2 Duration: 1.51 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:13.202000 REPORT RequestId: 40367789-27c0-419b-8483-cf054978e9b6 Duration: 1.51 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:13.552000 REPORT RequestId: 6d166356-5a6c-44c7-b5dd-5c2808340b79 Duration: 1.38 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
z wywołaniem S3 - tutaj mówimy
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:54:55.322000 REPORT RequestId: d97fd1cd-d9ef-4d16-adcb-514fa65ca6f8 Duration: 513.99 ms Billed Duration: 514 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
przerwa
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.063000 REPORT RequestId: e6e6884d-d6b6-4dc7-aede-f3863f3b331d Duration: 519.35 ms Billed Duration: 520 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.202000 REPORT RequestId: 91eeaca0-c983-4e99-9608-36948511bd27 Duration: 23.95 ms Billed Duration: 24 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.662000 REPORT RequestId: d7035256-53f8-463c-93fd-f5de608f47a6 Duration: 33.55 ms Billed Duration: 34 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:03.082000 REPORT RequestId: a2e338b3-f18e-4644-8f6d-2ab151421996 Duration: 21.50 ms Billed Duration: 22 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:03.562000 REPORT RequestId: 111665a1-f43c-488b-bc02-cd203fef478f Duration: 42.58 ms Billed Duration: 43 ms Memory Size: 128 MB Max Memory Used: 77 MB
Rozmiar pamięci: 77 MB i Billed duration ~35 ms… Czas rozgrzewania 1/2 sekundy
wyczyszczenie stosu CloudFormation AWS
sam delete --stack-name "t1-py"
Budowa, testowanie, wdrażanie i uruchamianie - funkcji Lambda opartej na JavaScript
JS lokalny
budowa i uruchamianie lokalnie
sam build
sam local invoke
generuje
REPORT RequestId: 9e3c0a43-6432-4cc7-babf-f591773e5315 Init Duration: 0.05 ms Duration: 126.34 ms Billed Duration: 127 ms Memory Size: 128 MB Max Memory Used: 128 MB
REPORT RequestId: 2856e8f1-166f-4a90-a094-d575ef00ff69 Init Duration: 0.02 ms Duration: 43.73 ms Billed Duration: 44 ms Memory Size: 128 MB Max Memory Used: 128 MB
REPORT RequestId: f1156bd5-dd9f-4c1c-b65d-68c04df5a987 Init Duration: 0.02 ms Duration: 42.79 ms Billed Duration: 43 ms Memory Size: 128 MB Max Memory Used: 128 MB
czas trwania wywołań S3 z lokalnego:
REPORT RequestId: 06c4a5a0-6f1a-4e09-9518-cf706d08c319 Init Duration: 0.13 ms Duration: 280.33 ms Billed Duration: 281 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: 4393e8bd-c59b-42e5-83b5-1729d0fb4d8f Init Duration: 0.08 ms Duration: 270.42 ms Billed Duration: 271 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: 90979693-7245-4f88-9f6b-070be83f75df Init Duration: 0.05 ms Duration: 431.86 ms Billed Duration: 432 ms Memory Size: 128 MB Max Memory Used: 128 MB
JS na AWS
Wdrażanie i zgoda na to, co prosi sam, oraz powiadomienie, aby zezwolić na nieautoryzowane wywołania do naszych funkcji Lambda
sam deploy --guided
# teraz nasłuchuj logów
sam logs -n HelloWorldFunction --stack-name t2-js --tail
#lub
sam logs -n HelloWorldS3Function --stack-name t2-js --tail
a po wywołaniu cURL w innym konsoli, logi
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:38.831000 REPORT RequestId: 24e86600-e316-4678-81db-41eafff81aa0 Duration: 4.92 ms Billed Duration: 5 ms Memory Size: 128 MB Max Memory Used: 62 MB Init Duration: 139.82 ms
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:47.451000 REPORT RequestId: 0d269d7f-61f6-4b48-b3c2-6f83aaba5f45 Duration: 2.58 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 62 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:58.622000 REPORT RequestId: f1bd0e5a-d1d0-4136-9b02-6fba4dcc9a70 Duration: 1.34 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:59.089000 REPORT RequestId: baa791a7-4f9c-41be-b516-81213bc7a365 Duration: 1.44 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:59.966000 REPORT RequestId: ea2a1515-1188-4a44-956f-91f2fc97491f Duration: 1.46 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:39:00.428000 REPORT RequestId: 0f536ec5-26cb-42b9-beaa-045984b8c468 Duration: 1.45 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 63 MB
Dobrze. nie spędziło się dużo czasu na niczym, ale nie zasypia również.
Wykonanie funkcji Lambda odczytującej z bazy danych S3 w JavaScript
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:45.155000 REPORT RequestId: c4630419-4502-467c-9cda-c5087d6b2743 Duration: 1051.97 ms Billed Duration: 1052 ms Memory Size: 128 MB Max Memory Used: 88 MB Init Duration: 411.76 ms
...break...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:52.195000 REPORT RequestId: 4b881f2b-4b30-4890-afc2-b7299b6397b3 Duration: 259.87 ms Billed Duration: 260 ms Memory Size: 128 MB Max Memory Used: 89 MB
...break...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:58.455000 REPORT RequestId: 77f4d820-2f2e-4190-a1e3-bc4821ccdb9b Duration: 165.44 ms Billed Duration: 166 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:03.095000 REPORT RequestId: 41ce9fd8-aaf4-46c4-a827-0a45592041c0 Duration: 63.74 ms Billed Duration: 64 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:03.695000 REPORT RequestId: 9494f176-3818-4fb3-a581-857f1eb2df23 Duration: 73.16 ms Billed Duration: 74 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:04.315000 REPORT RequestId: 528c909f-4a08-415e-a713-e3d9e9e4d615 Duration: 87.44 ms Billed Duration: 88 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:04.835000 REPORT RequestId: 9b636429-56f5-4974-afe9-e53e786adb61 Duration: 55.62 ms Billed Duration: 56 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:05.415000 REPORT RequestId: d4c298df-b237-4605-894f-fde05fe0461a Duration: 69.88 ms Billed Duration: 70 ms Memory Size: 128 MB Max Memory Used: 89 MB
Czyszczenie AWS js
usuwanie…
sam delete --stack-name t2-js
Budowa, testowanie, wdrażanie i uruchamianie - funkcji Lambda opartej na Golang
Testowanie lokalnego Golang Lambda
Aby być precyzyjnym - wykonywanie testów
, a nie wykonywanie testów jednostkowych
.
Komenda sam build
znajduje się wewnątrz Makefile
. Więc uruchamiamy:
make
uruchamianie pojedynczej funkcji
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
Opcja 2: teraz uruchom lokalny serwer:
sam local start-api
wynik:
teraz w osobnym oknie terminala:
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
wynik lokalnego wywołania funkcji Lambda opartej na Golang:
REPORT RequestId: 54cc3271-7f04-44a3-8d91-d5d69d2428ea Init Duration: 0.03 ms Duration: 2.24 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: c753bdf9-1af0-4b40-9516-5fb2ad96ba00 Duration: 0.29 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: edceb310-e6e9-4f0a-bd6e-58afd40e9b70 Duration: 0.28 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 128 MB
wynik lokalnego wywołania “s3” do funkcji Lambda opartej na Golang:
REPORT RequestId: 1556e298-a17a-4d45-9fdc-b7f62118c246 Init Duration: 0.06 ms Duration: 142.76 ms Billed Duration: 143 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: e4638fb4-52f4-4086-b673-c9de0f02d3f7 Duration: 86.75 ms Billed Duration: 87 ms Memory Size: 128 MB Max Memory Used: 128 MB
...
REPORT RequestId: b1bdcbf8-06f8-4605-a7da-d34f41198811 Duration: 105.07 ms Billed Duration: 106 ms Memory Size: 128 MB Max Memory Used: 128 MB
czas trwania 1ms wygląda dobrze, ale Memory Size: 128 MB? Dlaczego? Powinno być około 12MB? Prawdopodobnie to minimalna wartość, jaką mają.
Testowanie AWS Golang Lambda
sam deploy --guided
uruchom nasłuchiwacz logów
sam logs -n HelloWorldFunction --stack-name t3-go --tail
i wywołaj funkcję 3 razy:
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/
w logach widzimy:
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:02.908000 REPORT RequestId: 358b5762-dad7-4380-a83f-e21349fae20b Duration: 11.71 ms Billed Duration: 70 ms Memory Size: 128 MB Max Memory Used: 20 MB Init Duration: 57.52 ms
...break...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:07.404000 REPORT RequestId: 3051d741-504a-49ae-95b3-077628b4b929 Duration: 0.99 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 20 MB
...break...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:11.923000 REPORT RequestId: 51c38ca9-920d-4f30-be75-a1a44538c9ee Duration: 1.02 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 20 MB
...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:12.486000 REPORT RequestId: 98727f66-f3f1-46ad-9a5a-55a6243609ba Duration: 0.96 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 20 MB
...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:13.015000 REPORT RequestId: 9d8bfb28-d4eb-4868-9af7-3b3946acc92c Duration: 0.98 ms Billed Duration: 1 ms Memory Size: 128 MB Max Memory Used: 20 MB
- Billed duration to 2ms. Dobrze.
- Max Memory Used: 20 MB. Oczekiwane.
- Wydaje się, że nie zasypia.
Teraz zrób to samo dla funkcji Lambda, która ma wywołanie do S3
2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:22:57.711000 REPORT RequestId: 9f09db3e-d9bc-45fe-9674-df133f0f1dc2 Duration: 28.08 ms Billed Duration: 29 ms Memory Size: 128 MB Max Memory Used: 37 MB
...
2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:23:15.324000 REPORT RequestId: 4bc39553-6a42-4347-b322-6c80f24cdb01 Duration: 30.56 ms Billed Duration: 31 ms Memory Size: 128 MB Max Memory Used: 38 MB
...
2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:23:51.144000 REPORT RequestId: 55ac2b18-394c-4699-87a5-4ba52230f386 Duration: 27.01 ms Billed Duration: 28 ms Memory Size: 128 MB Max Memory Used: 38 MB
Czyszczenie
Nie zapomnij usunąć
sam delete --stack-name t3-go
Przydatne linki
- Warstwowe Lambdy z AWS SAM i Python
- Poprawianie błędu GORM AutoMigrate w PostgreSQL
- AWS SAM + AWS SQS + Python PowerTools
- SAM cli: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
- Instalacja systemu Linux i narzędzi
- Arkusz wskazówek dla Golang
- Arkusz wskazówek dla Bash
- Arkusz wskazówek dla Pythona
- Popularność języków programowania i frameworków
- Przestrzeń Golang
- Alternatywy dla BeautifulSoup w Go
- Generowanie PDF w GO - biblioteki i przykłady"