AWS LambdaでDynamoDBがよく使われる理由

ryichk
·
公開:2023/12/22
  1. ネットワークの問題

AmazonRDSは、VPCに接続するサービスである。

DynamoDBは、VPCに接続しないサービスである。

Lambda関数は既定ではVPCに接続しないためRDSに接続するためにはVPC接続オプションを有効にする必要がある。

2019年9月まではLambda関数のVPC接続機能のパフォーマンスが悪いという理由でRDSへの接続が避けられていた。

  1. コネクション維持のためのパフォーマンス問題

リレーショナル型DBは、接続(コネクション)を維持する。

「接続して命令1を出して命令2を出して...全部終わったら接続を切る」という一連の流れでデータを処理する。

最初の接続処理では、認証を含めた様々なやり取りが行われるため時間がかかる。

そのため、接続と切断を繰り返すとパフォーマンスが悪くなる。

いくつかのシステムではRDSデータベースに接続する際、一度接続したらその接続を使い回す「コネクションプーリング」という仕組みを使うことでパフォーマンス向上を試みることもある。

Lambda関数は同時に呼び出された数だけ同時実行されるため、DBにアクセスする際に多数のDBコネクションが発生し、パフォーマンスが悪化する原因となる。

DynamoDBは、APIベースの呼び出しで処理を完了するNoSQL型のDBのため、コネクションを接続する必要がない。

そのため、同時接続が多く発生してもパフォーマンスを著しく悪化することはない。

Lambda関数からRDSにアクセスする際はAmazon RDS Proxyを使うことでパフォーマンスの悪化を抑えられる。

Amazon RDS Proxyは、RDSへのコネクションプールを提供するものである。

DynamoDBからRDSにデータをコピーする構成について

DynamoDBに書き込まれたデータをRDSにコピーし、検索や集計はRDSで行うというシステム構成。

DynamoDBはLambda関数からデータを保存する際の一時的なキャッシュとして扱うイメージである。

DynamoDBからRDSにデータを書き込む際は、DynamoDBストリームという機能を使う。

レコードが挿入(更新・削除)された際に、RDSに対してデータを挿入(更新・削除)するLambda関数を呼び出す構成にする。

参考

AWS Lambda実践ガイド 第2版

@ryichk
wanna be a good hacker.