

サーバレスのアプリケーションを構築中で、LambdaからRDS Proxyを経由してRDS（Aurora
PostgraSQL）と通信する箇所の検証を行っています。  
ハンズオンなどを参考に構築したのですが、2回に1回関数がタイムアウトしてしまうという症状に悩まされています。逆に2回に1回は想定通りにDBからデータを取り出したりインサートしたり出来ます。

ちなみにLambda関数はAurora DBやRDS
Proxyを作成したサブネットと同じサブネット内に配置して双方のセキュリティグループの許可設定も行っています。

Lambda関数のランタイム：Node.js 16.x  
Aurora PostgreSQLのバージョン：PostgreSQL13.6

Lambda関数のコードは以下の通りです。

[code]

    const {Client} = require('/opt/node_modules/pg');
    
    exports.handler = async (event, context) => {
      try{
        // client設定
        const client = new Client({
          host: '【RDS_PROXY_ENDPOINT】',
          port: 5432,
          user: 'postgres',
          database: 'postgres',
          password: '【DB_PASSWORD】',
        });
        
        // 接続
        await client.connect(function(err) {
          if (err) {
            console.error('connection error', err.stack)
          }
        });
        
        // クエリ実行
        const res = await client.query('select * from TASK');
        console.log(res);
        await client.end();
        
        return {
          statusCode: 201,
          body: JSON.stringify({
            dbResponse: res.rows
          }),
        }
      }catch (e) {
        console.log(e);
      }
    };
    
[/code]

エラー時のログを見てみるのですが、以下のようにタイムアウトになったという情報しか得られなくて手がかりがつかめずにいます。

[code]

    START RequestId: f388ee0c-ab98-410e-a530-8ca7a29ae727 Version: $LATEST
    END RequestId: f388ee0c-ab98-410e-a530-8ca7a29ae727
    REPORT RequestId: f388ee0c-ab98-410e-a530-8ca7a29ae727  Duration: 3005.41 ms    Billed Duration: 3000 ms    Memory Size: 128 MB Max Memory Used: 65 MB  
    2022-05-26T00:37:00.843Z f388ee0c-ab98-410e-a530-8ca7a29ae727 Task timed out after 3.01 seconds
    
[/code]

以下は成功したときのログになります。

[code]

    START RequestId: 68d2b7dc-85a1-4bf8-b4a7-997d9106f577 Version: $LATEST
    2022-05-26T00:59:03.084Z    68d2b7dc-85a1-4bf8-b4a7-997d9106f577    INFO    Result {
      command: 'SELECT',
      rowCount: 8,
      oid: null,
      rows: [
        { id: 0, name: 'task1' },
        { id: 1, name: 'task2' },
        { id: 2, name: 'task3' },
      ],
      fields: [
        Field {
          name: 'id',
          tableID: 16415,
          columnID: 1,
          dataTypeID: 23,
          dataTypeSize: 4,
          dataTypeModifier: -1,
          format: 'text'
        },
        Field {
          name: 'name',
          tableID: 16415,
          columnID: 2,
          dataTypeID: 1043,
          dataTypeSize: -1,
          dataTypeModifier: 14,
          format: 'text'
        }
      ],
      _parsers: [ [Function: parseInteger], [Function: noParse] ],
      _types: TypeOverrides {
        _types: {
          getTypeParser: [Function: getTypeParser],
          setTypeParser: [Function: setTypeParser],
          arrayParser: [Object],
          builtins: [Object]
        },
        text: {},
        binary: {}
      },
      RowCtor: null,
      rowAsArray: false
    }
    END RequestId: 68d2b7dc-85a1-4bf8-b4a7-997d9106f577
    REPORT RequestId: 68d2b7dc-85a1-4bf8-b4a7-997d9106f577  Duration: 219.23 ms Billed Duration: 220 ms Memory Size: 128 MB Max Memory Used: 16 MB  
    
[/code]

このような症状の場合原因としては何が考えられますか？


CC BY-SA 4.0
2022-05-26T00:16:03.340
89058
2022-10-26T14:46:08.487
2022-10-26T14:46:08.487
19110
40485
question
node.js aws-lambda amazon-rds
Lambda関数からRDS Proxyを使用してRDSのDBにアクセスするときに2回に1回関数がタイムアウトしてしまいます。