0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python(Django) x AWS 一人アドベントカレンダーAdvent Calendar 2024

Day 13

【AWS】Lambda + RDS Proxyで「Lost connection to MySQL server during query」エラーになった場合の原因

Posted at

概要

AWS LambdaからRDSにアクセスするたびにDB接続が確立すると、接続数の急増によりリソースが逼迫することがあります。RDS Proxyを使うとコネクションプールを利用できるので負荷を軽減できます。
と言うことで、RDS Proxyを導入してみたのですが、以下のエラーに遭遇。

error: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query')

こちらの解決方法を紹介します。

解決方法

原因は、セキュリティグループにありました。
以下の記事を参考にしたら解決。

RDSとRDS Proxyを同じSecurity Groupに紐付けると疎通エラーとなるので、個別に分けた方が良いかと思います。
https://blog.serverworks.co.jp/2022/01/20/093110

私は最初、以下のように設定していました。
・Lambda用のセキュリティグループx1
・RDS/RDS Proxy用のセキュリティグループx1

これを、上記記事にあるように、3つそれぞれ作成したら疎通できるようになりました。
・Lambda用のセキュリティグループx1
・RDS Proxy用のセキュリティグループx1
・RDS用のセキュリティグループx1

どうやら、RDSとRDS Proxyどちらにも接続できてしまうとルールの競合?的なものが起きて、エラーが発生するようです。

以下のstackoverflowにも記載がありました。

The best thing you can probably do is to create a separate security group for the RDS Proxy.
It is not possible, right now through AWS web console, to create a self reference.
https://stackoverflow.com/questions/65634272/connection-error-when-using-aws-rds-proxy

stackoverflowの回答では、'self referential' security group ruleを追加することでも対応できるそうですが、こちらの方は試していません。

また、RDS Proxyを使うと連続した負荷テストでは効果を発揮しますが、単発の処理性能が劣化するようです。これはコネクションプーリングの初期化で時間が要するため、その分長くなってしまっているのではないか?と思われます。以下の記事でも同じような現象がありました。詳細を把握できましたら別途更新します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?