COM306のサンプルアプリをAWS Lambda Power Tuningでベンチマークしてみた

re:Invent 2023のセッション“Rustifying” serverless: Boost AWS Lambda performance with Rust (COM306) で紹介されていたサンプルアプリケーションをAWS Lambda Power Tuneで測定してみました。
2023.12.23

はじめに

前回構築したアプリケーションをAWS Lambda Power Tuningでベンチマークしてみます。

AWS Lambda Power TuningはLambda関数のコストと実行時間の関係を可視化し、トレードオフを最適化するためのOSSツールです。

デプロイ

How to deploy the AWS Lambda Power Tuning toolにいくつかのデプロイ手順が示されています。 一番簡単なのは Serverless Application Repositoryからのインストールで、今回はこれを使いました。

実行例

measure cold startの場合と同じく作成されるステートマシンにパラメータを指定して実行します。

/buckets-rustの実行例

{
  "lambdaARN": "arn:aws:lambda:ap-northeast-1:123456789000:function:s3-admin-ListBucketsRust-Skixu32S4m77",
  "num": 100,
  "powerValues": [
    128,
    256,
    512,
    1024,
    2048
  ],
  "payload": "{\"type\": \"REQUEST\", \"resource\": \"/buckets-rust\", \"path\": \"/buckets-rust\", \"httpMethod\": \"GET\", \"headers\": {}, \"queryStringParameters\": {}, \"pathParameters\": {}}"
}

実行結果はステートマシンの出力として以下のようなJSONで得られます。

{
  "power": 128,
  "cost": 0.0000011697000000000002,
  "duration": 556.7,
  "stateMachine": {
    "executionCost": 0.00028,
    "lambdaCost": 0.0028647507,
    "visualization": "https://lambda-power-tuning.show/#gAAAAQACAAQACA==;zSwLRM1Ms0PvTpZDiYieQ7xbkUM=;lv6cNZ1fyjWVrSk23kKzNnkKJDc="
  }
}

visualizationのURLにアクセスするとグラフで表示されます。

実行結果

Rust およびPythonの各実装での実行結果、およびそれらの比較は下記のリンクから参照できます。

Rustはメモリ量にかかわらず良好なパフォーマンスとなることがわかります。このあたりはセッション中に言及されていた内容の通りだと思います。

まとめ

AWS Lambda Power TuneingでRust/Pythonでの各実装のメモリ量とパフォーマンスの関係を測定しました。