AWS Lambda の各ランタイムを比較するためのデモコードです。
benchmark-tool
ディレクトリには、 Lambda 関数として実装した簡易ベンチマーク用ツールがあります。Lambda 関数にリクエストを投げて、CloudWatch Logs から性能を収集します。。test-events
ディレクトリには、↑のベンチマークツールで使う(後述)テストイベントJSONが格納してあります。terraform
ディレクトリには、Lambda 関数からアクセスする DynamoDB テーブルをセットアップする terraform があります。- その他の
java
やpython
などのディレクトリには、各ランタイムでの Lambda 関数と Serverless Framework の設定が入っています。
- AWS リージョンは ap-northeast-1 を利用します。
- ap-northeast-1 に
TestRuntimeBenchmark
という名前の DynamoDB テーブルを作成しておいてください。S
型のpk
という名前のハッシュキー、S
型のsk
という名前のレンジキーが必要です。
- 以下をインストールしておいてください。
今回の Lambda 関数は、ap-northeast-1 にある TestRuntimeBenchmark
という名前の DynamoDB テーブルに接続します。
S
型の pk
という名前のハッシュキー、S
型の sk
という名前のレンジキーが必要です。
またテスト用データには、キー属性に加えて、S
型 の attr1
、attr2
、attr3
、attr4
という属性が必要です。
このテスト用テーブルの作成とテスト用初期データの構築は、Terraform を使って以下で行なえます。
terraform
ディレクトリに移動する。terraform init
で初期化する。terraform apply
でプロビジョニングする。- 使い終わったら
terraform destroy
で削除する。
- 各サンプルプロジェクトのディレクトリに移動します。例えば
java/sdk/
です。 - 各種ライブラリをインストールするため、
npm install
を実行します。 - Lambda 関数をプロビジョニングするため、
npm run deploy
を実行します。 - 関数を使い終わってもう不要になったら
npm run remove
を実行します。
benchmark-tool
に移動します。- 各種ライブラリをインストールするため、
npm install
を実行します。 - Lambda 関数をプロビジョニングするため、
npm run deploy
を実行します。 - Web ブラウザで AWS Lambda コンソールを開きます。
- デプロイしたベンチマーク用 Lambda関数(例えば
RuntimeBenchmark-TypeScript-Bench-dev-benchmark
)のテストコンソールを開きます。 - テストイベントとして、以下のような JSON を作成し、テスト実行します。
{ "FunctionName": "RuntimeBenchmark-TypeScript-SDK-dev-getItem", "Concurrency": "100", "PayloadJson": { /* PayloadJson の中身は test-events ディレクトリから取得します */ "rawPath": "/getItem", "queryStringParameters": { "pk": "1", "sk": "1" }, ... } }
FunctionName
: Lambda 関数名。ARN ではありません。Concurrency
: Lambda の並列実行を試みる回数。通常、100〜200くらいを指定します。PayLoadJson
: 指定した関数に与える JSON オブジェクト。
- テスト結果は JSON 形式で、指定された Lambda について、次の測定結果を含みます。
count.initDurations
: コールドスタートした回数count.durations
: 実際の処理を行った回数durations.initDurations
: コールドスタートにかかった時間(ミリ秒)durations.durations
: 実際の処理にかかった時間(ミリ秒)