You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS调用AWS Secrets Manager回调失效致Lambda超时问题

解决Lambda调用Secrets Manager获取RDS凭证超时且无返回的问题

嘿,我一眼就揪出了问题的核心——你调用的函数名称和模块导出的函数名称完全不匹配,这直接导致你的回调函数永远不会被触发,Lambda一直在空等最终超时,自然也看不到creds的日志输出。

咱们对照代码看看:

  1. 在secrets-manager.js里,你导出的函数是getRDSCredsFromSM:
module.exports = { getRDSCredsFromSM };
  1. 但在index.js里,你调用的却是一个不存在的getDbCredentialFromSecretsManager函数:
secretsManager.getDbCredentialFromSecretsManager(function(err,creds) { ... })

Node.js找不到这个不存在的函数,所以根本不会执行Secrets Manager的请求逻辑,也不会调用你传入的回调,Lambda进程就一直挂着直到超时。

修正方案

只需要把index.js里的函数调用名称改成和导出一致的getRDSCredsFromSM就行,修正后的代码如下:

var mysql = require('mysql');
var secretsManager = require('./secrets-manager');
exports.handler = (event, context, callback) => {
 secretsManager.getRDSCredsFromSM(function(err,creds) { // 这里修改函数名
  if (err) {
   console.log(err);
   callback(err, null);
  } else{
   console.log("Creds ", creds);
   var connection = mysql.createConnection(creds);
   connection.connect(function(err) {
    if (err) {
     console.error(err.stack);
     callback(err,null);
    } else{
     callback(null,connection);
    }
   });
  }
 });
}

额外的小建议

为了避免后续踩坑,还可以做这些检查:

  • 确认Lambda执行角色拥有secretsmanager:GetSecretValue权限,不然即使函数名对了,也会返回权限错误
  • 核对secretName的取值是正确的Secrets Manager密钥ID或ARN
  • 把Lambda的超时时间设置得合理一点,建议至少5秒,毕竟Secrets Manager的请求需要一点网络耗时

内容的提问来源于stack exchange,提问作者Dev1ce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:51:23