AWS Lambdaのパフォーマンス: JavaScriptとPythonとGolangの比較

AWS Lambdaで使用するべき言語は?

目次

AWSにデプロイするためのラムダ関数はいくつかの言語で書くことができます。 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は3つの中で最も良いですが、それほど大きな差はありません。

興味深いオプションは、Pythonのラムダ関数にメモリを追加することで、同時にCPUも追加し、ウォームアップ時間を短縮することです。S3への呼び出しは、遅延が少なくなることはないでしょう。

AWSによる合成的な素数テストでは、Pythonラムダ関数の実行コストは128MBと512MBのRAM制限を使用する場合と同じです。512MBの設定ではパフォーマンスが大幅に向上します。

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

何がAWS SAMなのか

ここでは、さまざまなラムダ関数をテストするためにSAMを使用しています。

AWS SAMは、サーバーレスアプリケーションモデルです。

AWS SAMプロジェクトには、AWS SAMテンプレートと関数コードが含まれています。 SAMテンプレートは、どのようにデプロイ、実行、テストするか、権限、およびクラウドフォーメーションスタックを作成するための他の重要なパラメータを記述します。

使用するには、aws clisam cliが必要です。

AWS CLIのインストール

ローカルの手順: Install AWS CLI in Reinstall linux doc

または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

ラムダ関数の作成

コマンドを3回実行

sam init

そして、毎回hello-worldテンプレートを選択し、異なる言語を選択することで、3つのsamアプリケーションを作成します。

Python 3.12に基づくAWS Lambda関数

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
    
    Next steps can be found in the README file at t1-py/README.md
        

Commands you can use next
=========================
[*] Create pipeline: cd t1-py && sam pipeline init --bootstrap
[*] Validate SAM template: cd t1-py && sam validate
[*] Test Function in the Cloud: cd t1-py && sam sync --stack-name {stack-name} --watch

JavaScriptとnodejs20.xに基づくAWS Lambda関数

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
    
    Next steps can be found in the README file at t2-js/README.md
...

Golang (aws image al2023)に基づくAWS Lambda関数

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
    
    Next steps can be found in the README file at t3-go/README.md

ビルド、テスト、デプロイ、実行 - PythonベースのLambda関数

ローカルでのテスト

sam build --use-container

出力は最後に表示されます:

Commands you can use next
=========================
[*] Validate SAM template: sam validate
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
[*] Deploy: sam deploy --guided

3回実行

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秒かかり、使用メモリは128 MBです。

AWSでのテスト

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

SAM CLIはクラウドフォーメーションスタック名を尋ね、確認後、関数をAWSにデプロイします。 SAM出力の最後のページは以下のようになります:

Previewing CloudFormation changeset before deployment
======================================================
Deploy this changeset? [y/N]: Y

2024-08-17 20:19:30 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 5.0 seconds)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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                         Resource creation Initiated                  
CREATE_COMPLETE                                AWS::IAM::Role                                 HelloWorldFunctionRole                         -                                            
CREATE_IN_PROGRESS                             AWS::Lambda::Function                          HelloWorldFunction                             -                                            
CREATE_IN_PROGRESS                             AWS::Lambda::Function                          HelloWorldFunction                             Resource creation Initiated                  
CREATE_COMPLETE                                AWS::Lambda::Function                          HelloWorldFunction                             -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::RestApi                       ServerlessRestApi                              -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::RestApi                       ServerlessRestApi                              Resource creation Initiated                  
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     Resource creation Initiated                  
CREATE_COMPLETE                                AWS::Lambda::Permission                        HelloWorldFunctionHelloWorldPermissionProd     -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          Resource creation Initiated                  
CREATE_COMPLETE                                AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     -                                            
CREATE_IN_PROGRESS                             AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     Resource creation Initiated                  
CREATE_COMPLETE                                AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     -                                            
CREATE_COMPLETE                                AWS::CloudFormation::Stack                     t1-py                                          -                                            
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Outputs                                                                                                                                                                                   
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
...
Key                 HelloWorldApi                                                                                                                                                         
Description         API Gateway endpoint URL for Prod stage for Hello World function                                                                                                      
Value               https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/                                                                                               
...-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

HelloWorldApiというキーがあり、その説明は「Hello World関数のProdステージのAPI GatewayエンドポイントURL」ですか?ここに私たちの公開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クラウドフォーメーションスタックのクリーンアップ

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

AWS 上での JS

デプロイし、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 バケットから読み込む Lambda 関数の 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

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

ローカルでの “S3” 呼び出しの Golang ベース Lambda 関数の出力:

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 の所要時間は良さそうですが、Memory Size: 128 MB? なぜですか? 12MB 程度になるべきではありませんか? おそらく、それ以下の最小値は存在しないのです。

AWS 上の Golang Lambda のテスト

sam deploy --guided

ログリスナーを開始

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

関数を3回呼び出す:

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
  • Billed duration は 2ms です。良いです。
  • Max Memory Used: 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

有用なリンク