

aws lambdaでpymysqlを使ってRDSに接続を行っています。

handlerの外に接続処理をしておけば、パフォーマンスは向上しますが、その状態では他のlambdaから作成されたレコードとは取得できず、直接修正したレコードの内容も反映されないですね。

AWS公式ドキュメントにもhandlerの外に接続することを推奨しているみたいですが、調べてみても速度向上の記事しかありません。かなり大きな問題かと思いますが。。

何かご存じでしょうか。

**追記**

RDSの複数のテーブルにおいて、データを作成するAPI Gateway -> Lambdaと取得するAPI Gateway -> Lambdaがあります。  
このAPIは頻繁に実行されていますので、ほとんどがWarm startです。

データが取得できない問題とは、例えば以下のような状態です。

  * テーブルAに一つのレコードがある状態で、取得用のAPIから登録されているレコードを取得。
  * その後、登録用APIで新規レコードを作成。
  * その後、取得用APIでデータを取得しようとしたら、前のレコードしか取れない。

取得用のLambdaがDB接続した時点で存在しているレコードしか取れないのかなという感じでしたが、合っていますでしょうか。  
一つのテーブルだけではなく、二つのテーブルで発生しました。

登録用のLambdaも取得用のLambdaもRdsのConnectを以下のようにしています。

[code]

    # Rdsの接続と作成/取得メソッドをrds.pyにRdsというクラスで定義
    from rds import Rds
    
    # DB接続処理
    Rds.connect()
    
    def lambda_handler(event, context):
        # データ作成や取得メソッドを実行
        Rds.insert()
    
[/code]

Rdsクラスではconnectをクラス内のglobal変数に入れて、使いまわしています。


CC BY-SA 4.0
2022-06-02T05:53:58.450
89195
2022-06-05T04:53:17.450
2022-06-05T04:53:17.450
3060
52722
question
python aws-lambda amazon-rds pymysql
Lambda ハンドラー外部でRDSへの接続をした場合、最新データが取れない