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: 実際の処理にかかった時間(ミリ秒)