AWS-SDK 2.x在Node.js 20/21环境下调用SecretsManager超时求助
AWS SDK v2.x SecretsManager getSecretValue 在 Node.js 20/21 环境超时问题
问题详情
我使用 AWS SDK v2.x,通过process.env.AWS_SDK_LOAD_CONFIG = 1;配置环境变量,编写了如下 SecretManager 类。调用其getSecretValue方法时,在 Node.js 20/21 环境出现超时问题,但 Node.js 18/19 环境可正常运行。每次用 nvm 切换 Node 版本都会清理package-lock.json和node_modules并重新执行npm i,原项目基于 Node.js 12,尝试多种依赖安装方式后问题仍存在。
SecretManager 类代码
const AWS = require("aws-sdk"); let client; class SecretManager { constructor() { throw new Error("Constructor not implemented"); } static initialize(config) { AWS.config.update({ region: config.aws.region, }); client = new AWS.SecretsManager(); return client; } static getClient() { return client; } } module.exports = SecretManager;
调用代码
const secretManager = SecretManager.initialize(config); secretManager.getSecretValue( { SecretId: config.awsSecretManagerId }, () => {} );
可能的原因及解决方法
Node.js 20+ 网络默认行为变更
Node.js 20 起调整了 HTTP(S) 代理、根证书信任等默认配置,可显式指定 AWS SDK 的 HTTP 选项强制兼容:static initialize(config) { AWS.config.update({ region: config.aws.region, httpOptions: { agent: new require('https').Agent({ rejectUnauthorized: true, secureProtocol: 'TLSv1_2_method' }) } }); client = new AWS.SecretsManager(); return client; }AWS SDK v2 版本兼容性
旧版 AWS SDK v2 可能未适配 Node.js 20+ 特性,升级到最新稳定版:npm install aws-sdk@latest环境变量配置时机错误
确保process.env.AWS_SDK_LOAD_CONFIG = 1;执行在require('aws-sdk')之前,否则配置不生效:process.env.AWS_SDK_LOAD_CONFIG = 1; const AWS = require("aws-sdk"); // 后续代码...凭证加载逻辑差异
Node.js 20+ 对凭证链加载逻辑有调整,可显式指定凭证来源:AWS.config.update({ region: config.aws.region, credentials: new AWS.SharedIniFileCredentials({ profile: 'your-profile' }) // 或使用环境变量凭证:new AWS.EnvironmentCredentials('AWS') });
内容的提问来源于stack exchange,提问作者Syed Muhammad Akbar
相关产品推荐
相关产品推荐

