AWS Lambda 性能:JavaScript 与 Python 与 Golang

使用哪种语言编写 AWS Lambda?

目录

我们可以在多种语言中编写用于部署到 AWS 的 lambda 函数。 让我们比较一下用 JavaScript、Python 和 Golang 编写的(几乎为空的)函数的性能…

AWS Lambda Function logo

TL;DR

简而言之:

语言 带预热的账单时长 账单时长 内存大小 最大内存使用
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 在 128GB RAM 上有最长的预热时间,
  • JavaScript 整体最慢
  • Golang 是这三个中最好的,但差别不大

一个有趣的选项是通过增加内存和同时增加 CPU 来加速 Python lambda 函数。这只会减少预热时间,我想。调用 S3 不会变得不那么延迟。

在 AWS 的合成 prime numbers 测试中 - 运行 Python lambda 的成本与使用 128MB 和 512MB RAM 限制相同, 而 512MB 设置的性能显著更快。

https://docs.aws.amazon.com/lambda/latest/operatorguide/computing-power.html

什么是 AWS SAM

我们在这里使用 SAM 来测试不同的 lambda 函数。

AWS SAM 是一个无服务器应用程序模型。

AWS SAM 项目包括 AWS SAM 模板和函数代码。 SAM 模板描述了如何部署、运行和测试 lambda 函数、权限和其他重要参数 以创建 CloudFormation 堆栈。

要使用它,我们需要 aws clisam cli

安装 AWS cli

本地安装方法:在 Reinstall linux doc 中安装 AWS CLI

或在 AWS 网站上:https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

安装 SAM cli

基本上 - 从 AWS 网站下载 SAM cli 安装程序 zip,解压并安装

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

# 检查 sam 是否安装
sam --version

清理安装文件

rm -rf sam-installation
rm aws-sam-cli-linux-x86_64.zip

创建 lambda 函数

运行三次脚本

sam init

并每次选择 hello-world 模板,但使用不同的语言, 我们创建了 3 个 sam 应用程序

基于 Python 3.12 的 AWS Lambda 函数

sam init 的输出:

    -----------------------
    生成应用程序:
    -----------------------
    名称:t1-py
    运行时:python3.12
    架构:x86_64
    依赖管理器:pip
    应用程序模板:hello-world
    输出目录:.
    配置文件:t1-py/samconfig.toml
    
    下一步可以在 t1-py/README.md 文件的 README 文件中找到
        

下一步可以使用的命令
=========================
[*] 创建管道:cd t1-py && sam pipeline init --bootstrap
[*] 验证 SAM 模板:cd t1-py && sam validate
[*] 云中测试函数:cd t1-py && sam sync --stack-name {stack-name} --watch

基于 JavaScript 和 nodejs20.x 的 AWS Lambda 函数

sam init 的输出:

    -----------------------
    生成应用程序:
    -----------------------
    名称:t2-js
    运行时:nodejs20.x
    架构:x86_64
    依赖管理器:npm
    应用程序模板:hello-world
    输出目录:.
    配置文件:t2-js/samconfig.toml
    
    下一步可以在 t2-js/README.md 文件的 README 文件中找到
...

基于 Golang(aws 图像 al2023)的 AWS Lambda 函数

sam init 的输出:

    -----------------------
    生成应用程序:
    -----------------------
    名称:t3-go
    运行时:go (provided.al2023)
    架构:x86_64
    依赖管理器:mod
    应用程序模板:hello-world
    输出目录:.
    配置文件:t3-go/samconfig.toml
    
    下一步可以在 t3-go/README.md 文件的 README 文件中找到

构建、测试、部署和执行 - 基于 Python 的 Lambda 函数

本地测试

sam build --use-container

输出最后显示:

下一步可以使用的命令
=========================
[*] 验证 SAM 模板:sam validate
[*] 调用函数:sam local invoke
[*] 云中测试函数:sam sync --stack-name {{stack-name}} --watch
[*] 部署:sam deploy --guided

运行三次

sam local invoke

输出我们看到:

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

如果我们添加 s3 读取调用,输出将不同

...
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

好的,每次调用需要 1/2 秒,使用的 RAM 是 128 MB

在 AWS 上测试

sam build --use-container
sam deploy --guided

SAM cli 会询问 CloudFormation 堆栈名称,然后确认,然后将我们的函数部署到 AWS。 sam 输出的最后一页看起来像

预览 CloudFormation 变更集之前部署
======================================================
部署此变更集?[y/N]: Y

2024-08-17 20:19:30 - 等待堆栈创建/更新完成

CloudFormation 事件来自堆栈操作(每 5.0 秒刷新一次)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus                                 ResourceType                                   LogicalResourceId                              ResourceStatusReason                         
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS                             AWS::CloudFormation::Stack                     t1-py                                          User Initiated                               
CREATE_IN_PROGRESS                             AWS::IAM::Role                                 HelloWorldFunctionRole                         -                                            
CREATE_IN_PROGRESS                             AWS::IAM::Role                                 HelloWorldFunctionRole                         资源创建已启动                  
CREATE_COMPLETE                                AWS::IAM::Role                                 HelloWorldFunctionRole                         -                                            
CREATE_IN_PROGRESS                             AWS::Lambda::Function                          HelloWorldFunction                             -                                            
CREATE_IN_PROGRESS                             AWS::Lambda::Function                          HelloWorldFunction                             资源创建已启动                  
CREATE_COMPLETE                                AWS::Lambda::Function                          HelloWorldFunction                             -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::RestApi                       ServerlessRestApi                              -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::RestApi                       ServerlessRestApi                              资源创建已启动                  
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     资源创建已启动                  
CREATE_COMPLETE                                AWS::Lambda::Permission                        HelloWorldFunctionHelloWorldPermissionProd     -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          资源创建已启动                  
CREATE_COMPLETE                                AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     资源创建已启动                  
CREATE_COMPLETE                                AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     -                                            
CREATE_COMPLETE                                AWS::CloudFormation::Stack                     t1-py                                          -                                            
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CloudFormation 部署堆栈的输出
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
输出                                                                                                                                                                                   
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
...
Key                 HelloWorldApi                                                                                                                                                         
Description         API Gateway 端点 URL 用于 Prod 阶段的 Hello World 函数                                                                                                      
Value               https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/                                                                                               
...-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

看到 HelloWorldApi 键,描述是 API Gateway 端点 URL 用于 Prod 阶段的 Hello World 函数?这是我们的公共 URL:

https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/  

但让我们先启动日志监听器:

sam logs -n HelloWorldFunction --stack-name "t1-py" --tail

然后在日志监听器运行时,用另一个终端窗口调用:

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/

输出:

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

带有 s3 调用 - 这里我们正在谈论

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
...
a break
...
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

内存大小:77 MB 和账单时长 ~35 ms… 预热时间 1/2 秒

清理 AWS CloudFormation 堆栈

sam delete --stack-name "t1-py"

构建、测试、部署和执行 - 基于 JavaScript 的 Lambda 函数

JS 本地

构建和运行本地

sam build
sam local invoke

产生

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

s3 调用本地持续时间:

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 在 AWS 上

部署并同意 SAM 的要求,并允许对我们的 lambda 函数进行未认证的调用

sam deploy --guided
# 现在监听日志
sam logs -n HelloWorldFunction --stack-name t2-js --tail
# 或
sam logs -n HelloWorldS3Function --stack-name t2-js --tail

在另一个控制台中调用 curl 后,日志

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

很好。没有花太多时间做无事,但也不会睡着。

从 s3 存储桶读取的 JavaScript lambda 函数性能

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

清理 AWS JS

删除…

sam delete --stack-name t2-js

构建、测试、部署和执行 - 基于 Golang 的 Lambda 函数

本地测试 Golang Lambda

更准确地说 - 进行测试调用,而不是 运行单元测试

sam build 命令在 Makefile 中。因此我们运行:

make

运行单个函数

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

选项 2:现在启动本地服务器:

sam local start-api

输出:

现在在另一个终端窗口中:

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

本地对基于 Golang 的 lambda 的简单调用输出:

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

本地对基于 Golang 的 lambda 的 “s3” 调用输出:

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

1ms 的持续时间看起来不错,但内存大小:128 MB?为什么?应该是 12MB?可能是他们有最低限制。

测试 AWS Golang Lambda

sam deploy --guided

启动日志监听器

sam logs -n HelloWorldFunction --stack-name t3-go --tail

并调用函数三次:

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/

在日志中我们看到:

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
  • 账单时长是 2ms。很好。
  • 最大内存使用:20 MB。预期
  • 看起来它不会进入睡眠

现在让我们对具有内部 S3 调用的 lambda 函数做同样的事情

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

清理

不要忘记删除它

sam delete --stack-name t3-go

有用的链接