web-dev-qa-db-ja.com

ラムダ関数からdynamodbへの非常に遅いリクエスト

同じリージョン(us-east-1)にラムダ関数とdynamodbテーブルがあります。ラムダ関数では、非常に単純なクエリを実行します。

params =
  TableName: 'users'
  Item:
    email:
      S: event.body.email
  ConditionExpression: 'attribute_not_exists (email)'
dynamodb.putItem(params, context.done)

DynamoDBテーブルには数行しかなく、電子メールにはハッシュキーがあり、読み取り/書き込みスループットは5/5に設定されています。

Lambda関数は約4秒で実行されます...これは非常に遅いです。私は何か間違ったことをしていますか?


ラムダ関数のさまざまなメモリ設定で関数をテストしました(以前は128mbに設定されていました):

  • 256mb => 〜2000ms
  • 512mb => 〜1000ms
  • 1024mb => 〜500ms
  • 1536mb => 〜300ms

したがって、応答時間はメモリに1対1で依存しているようです(実際には、AWSがメモリに合わせてスケーリングするため、コンピューティング容量に依存します)。 REST APIを非常に単純にするために、プログラムが17 MBを使用している間、「応答性」を持たせるために1536 MBのメモリを設定する必要があるため、これはクレイジーです。


一方、私はそれがかかると計算しました:

  • 128MBのメモリを使用した1ミリオン4000msリクエストあたり8.32 $
  • 1536mbメモリを使用した100万リクエストあたり10.004 $

だから、それほど悪くはないと思います...

21
user606521

この問題は、Lambda関数が実行されているコンテナーの一時停止を解除することにも関連している可能性があります。また、関数が呼び出されるたびにオブジェクトが再初期化されないように、オブジェクトの初期化方法を最適化することもできます。

記事を参照してください Lambdaでのコンテナーの再利用

2
kixorz