Desempenho de AWS Lambda: JavaScript vs Python vs Golang
Qual linguagem usar para AWS Lambda?
Podemos escrever uma função lambda para implantação na AWS em vários idiomas. Vamos comparar o desempenho de (quase vazias) funções escritas em JavaScript, Python e Golang…
TL;DR
Resumindo:
Linguagem | Duração Billed Warm-up | Duração Billed | Tamanho da Memória | Memória Máxima Usada |
---|---|---|---|---|
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 |
- O Python tem o tempo de aquecimento mais longo com 128 GB de RAM,
- O JavaScript é o mais lento de todos
- O Golang é o melhor entre os três, mas não de forma significativa
Uma opção interessante é acelerar a função lambda do Python adicionando mais memória, e ao mesmo tempo CPU. Isso apenas diminuirá o tempo de aquecimento, acho eu. Chamar o S3 não se tornará menos latente.
No teste sintético de números primos
pela AWS - o custo de executar a lambda Python é o mesmo que usar 128 MB e 512 MB de limite de RAM,
e o desempenho da configuração de 512 MB é significativamente mais rápido.
https://docs.aws.amazon.com/lambda/latest/operatorguide/computing-power.html
O que é o AWS SAM
Estamos usando o SAM para testar diferentes funções lambda aqui.
O AWS SAM é um Modelo de Aplicação Serverless.
O projeto AWS SAM inclui o modelo AWS SAM e o código da função. O modelo SAM descreve como implantar, executar e testar a função lambda, permissões e outros parâmetros importantes para criar o stack do CloudFormation.
Para usá-lo, precisamos do aws cli
e do sam cli
.
Instalar AWS cli
Como fazer localmente: Instalar AWS CLI no documento Reinstall linux
Ou no site da AWS: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
Instalar SAM cli
Basicamente - Obtenha o instalador do SAM cli zip do site da AWS, descompacte e instale
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
# verifique se o sam está instalado
sam --version
Limpe os arquivos do instalador
rm -rf sam-installation
rm aws-sam-cli-linux-x86_64.zip
Criando as funções lambda
Chamando três vezes o script
sam init
e selecionando cada vez o modelo hello-world, mas diferentes idiomas, criamos 3 aplicações sam
Função lambda baseada em Python 3.12
a saída de sam init
:
-----------------------
Gerando aplicação:
-----------------------
Nome: t1-py
Runtime: python3.12
Arquiteturas: x86_64
Gerenciador de dependências: pip
Modelo de aplicação: hello-world
Diretório de saída: .
Arquivo de configuração: t1-py/samconfig.toml
Próximos passos podem ser encontrados no arquivo README no t1-py/README.md
Comandos que você pode usar em seguida
=========================
[*] Criar pipeline: cd t1-py && sam pipeline init --bootstrap
[*] Validar modelo SAM: cd t1-py && sam validate
[*] Testar Função no Cloud: cd t1-py && sam sync --stack-name {stack-name} --watch
Função lambda baseada em JavaScript e nodejs20.x
a saída de sam init
:
-----------------------
Gerando aplicação:
-----------------------
Nome: t2-js
Runtime: nodejs20.x
Arquiteturas: x86_64
Gerenciador de dependências: npm
Modelo de aplicação: hello-world
Diretório de saída: .
Arquivo de configuração: t2-js/samconfig.toml
Próximos passos podem ser encontrados no arquivo README no t2-js/README.md
...
Função lambda baseada em Golang (aws imagem al2023)
a saída de sam init
:
-----------------------
Gerando aplicação:
-----------------------
Nome: t3-go
Runtime: go (provided.al2023)
Arquiteturas: x86_64
Gerenciador de dependências: mod
Modelo de aplicação: hello-world
Diretório de saída: .
Arquivo de configuração: t3-go/samconfig.toml
Próximos passos podem ser encontrados no arquivo README no t3-go/README.md
Construir, Testar, Implantar e Executar - Função lambda baseada em Python
testar localmente
sam build --use-container
a saída mostra no final:
Comandos que você pode usar em seguida
=========================
[*] Validar modelo SAM: sam validate
[*] Invocar Função: sam local invoke
[*] Testar Função no Cloud: sam sync --stack-name {{stack-name}} --watch
[*] Implantar: sam deploy --guided
depois de executar três vezes
sam local invoke
a saída que vemos:
RELATÓRIO 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
...
RELATÓRIO 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
...
RELATÓRIO 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
se adicionarmos uma chamada de leitura do S3, a saída será diferente
...
RELATÓRIO 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
...
RELATÓRIO 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
...
RELATÓRIO 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 cada chamada leva 1/2 segundo, e a RAM usada é de 128 MB
testar na AWS
sam build --use-container
sam deploy --guided
O cli SAM perguntará sobre o nome do stack do CloudFormation, depois para confirmação, depois implantará nossa função na AWS. A última página da saída do sam teria algo como
Visualizando o changeset do CloudFormation antes da implantação
======================================================
Implantar este changeset? [y/N]: Y
2024-08-17 20:19:30 - Aguardando a conclusão da criação/atualização do stack
Eventos do CloudFormation da operação do stack (atualize a cada 5,0 segundos)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Status do Recurso Tipo de Recurso LogicalResourceId Motivo do Status
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
EM_PROGRESSO AWS::CloudFormation::Stack t1-py Iniciado pelo Usuário
EM_PROGRESSO AWS::IAM::Role HelloWorldFunctionRole -
EM_PROGRESSO AWS::IAM::Role HelloWorldFunctionRole Iniciado a Criação do Recurso
COMPLETO AWS::IAM::Role HelloWorldFunctionRole -
EM_PROGRESSO AWS::Lambda::Function HelloWorldFunction -
EM_PROGRESSO AWS::Lambda::Function HelloWorldFunction Iniciado a Criação do Recurso
COMPLETO AWS::Lambda::Function HelloWorldFunction -
EM_PROGRESSO AWS::ApiGateway::RestApi ServerlessRestApi -
EM_PROGRESSO AWS::ApiGateway::RestApi ServerlessRestApi Iniciado a Criação do Recurso
COMPLETO AWS::ApiGateway::RestApi ServerlessRestApi -
EM_PROGRESSO AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd -
EM_PROGRESSO AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d -
EM_PROGRESSO AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd Iniciado a Criação do Recurso
COMPLETO AWS::Lambda::Permission HelloWorldFunctionHelloWorldPermissionProd -
EM_PROGRESSO AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d Iniciado a Criação do Recurso
COMPLETO AWS::ApiGateway::Deployment ServerlessRestApiDeployment47fc2d5f9d -
EM_PROGRESSO AWS::ApiGateway::Stage ServerlessRestApiProdStage -
EM_PROGRESSO AWS::ApiGateway::Stage ServerlessRestApiProdStage Iniciado a Criação do Recurso
COMPLETO AWS::ApiGateway::Stage ServerlessRestApiProdStage -
COMPLETO AWS::CloudFormation::Stack t1-py -
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Saídas do stack implantado
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Saídas
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
...
Chave HelloWorldApi
Descrição URL do endpoint do Gateway API para a etapa Prod para a função Hello World
Valor https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
...-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Veja aí a chave HelloWorldApi
com a descrição URL do endpoint do Gateway API para a etapa Prod para a função Hello World
? Está aí a nossa URL pública:
https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
mas vamos iniciar nosso ouvinte de log primeiro:
sam logs -n HelloWorldFunction --stack-name "t1-py" --tail
e então, enquanto o ouvinte de log está rodando, chame em outra janela do 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/
saída:
2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.468000 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO RequestId: 6d166356-5a6c-44c7-b5dd-5c2808340b79 Duration: 1.38 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 32 MB
com chamada do S3 - estamos falando
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:54:55.322000 RELATÓRIO RequestId: d97fd1cd-d9ef-4d16-adcb-514fa65ca6f8 Duration: 513.99 ms Billed Duration: 514 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
um intervalo
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.063000 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO 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 RELATÓRIO RequestId: 111665a1-f43c-488b-bc02-cd203fef478f Duration: 42.58 ms Billed Duration: 43 ms Memory Size: 128 MB Max Memory Used: 77 MB
Tamanho da memória: 77 MB e Duração Billed ~35 ms… Tempo de aquecimento 1/2 segundo
limpeza do stack do CloudFormation da AWS
sam delete --stack-name "t1-py"
Build, Test, Deploy and Execute - Função Lambda baseada em JavaScript
JS local
construa e execute localmente
sam build
sam local invoke
produz
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
chamadas s3 do local:
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 no AWS
Implante e concorde com o que o sam pedir e diga para permitir chamadas não autenticadas às nossas funções lambda
sam deploy --guided
# agora ouça os logs
sam logs -n HelloWorldFunction --stack-name t2-js --tail
#ou
sam logs -n HelloWorldS3Function --stack-name t2-js --tail
e após executar cURL em outro console, os logs
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
Legal. não há muito tempo gasto fazendo nada. mas também não entra em sono.
Desempenho da função lambda que lê do bucket s3 em 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
Limpeza do AWS js
apagando…
sam delete --stack-name t2-js
Build, Test, Deploy and Execute - Função Lambda baseada em Golang
Teste Local Golang Lambda
Para ser preciso - fazendo chamadas de teste
, não executando testes unitários
.
O comando sam build
está dentro do Makefile
. Então estamos executando:
make
execute uma única função
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
Opção 2: agora inicie o servidor local:
sam local start-api
a saída:
agora em uma janela de terminal separada:
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
a saída da chamada local simples para a lambda baseada em 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
a saída da chamada local “s3” para a lambda baseada em 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
a duração de 1ms parece boa, mas Memory Size: 128 MB? Por quê? Deveria ser algo como 12MB? Provavelmente esse é o mínimo que eles têm.
Teste AWS Golang Lambda
sam deploy --guided
inicie o ouvinte de logs
sam logs -n HelloWorldFunction --stack-name t3-go --tail
e chame a função 3 vezes:
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/
nos logs vemos:
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
- Duração cobrada é de 2ms. Bom.
- Memória Máxima Utilizada: 20 MB. Esperado.
- Parece que não entra em sono.
Agora vamos fazer o mesmo para a função lambda que tem uma chamada para o S3 dentro
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
Limpeza
Não se esqueça de remover
sam delete --stack-name t3-go
Links úteis
- Lambda Camadas com AWS SAM e Python
- Corrigindo o erro de GORM AutoMigrate do PostgreSQL no Golang
- AWS SAM + AWS SQS + Python PowerTools
- CLI SAM: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
- Instale Linux e ferramentas
- Folha de Dicas do Golang
- Folha de Dicas do Bash
- Folha de Dicas do Python
- Popularidade de linguagens e frameworks de programação
- Espaço do Golang
- Alternativas ao BeautifulSoup para o Golang
- Gerando PDF em GO - Bibliotecas e exemplos"