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

Node.js部署EC2连接DynamoDB报CredentialsProviderError如何解决?

问题原因
  • 混用AWS SDK v2和v3的配置逻辑:你代码中用AWS.config.loadFromPath('./config.json')是AWS SDK v2的配置方法,仅对v2的客户端生效。报错栈所有错误都来自@aws-sdk/开头的v3模块,说明业务逻辑中使用了v3的相关能力,v3的默认凭证链无法读取v2的配置,找不到凭证就抛出该错误。
  • config.json路径读取失败:你用的./config.json是相对Node进程启动的工作目录的路径,若EC2上启动服务时的工作目录不是项目根目录,就会找不到配置文件,导致v2的配置也加载失败。
  • 跨平台node_modules兼容问题:直接将Mac环境下安装的node_modules上传到CentOS运行,部分带原生二进制的依赖存在平台兼容问题,可能导致配置读取逻辑异常。
修复方案

方案1:统一使用AWS SDK v2能力(快速修复)

如果你只需要用到marshall/unmarshall转换工具,不需要v3的其他能力,可以直接使用v2自带的工具,不需要引入v3的依赖:

  1. 替换导入语句:
// 删除原有的 const { marshall,unmarshall } = require("@aws-sdk/util-dynamodb");
const { marshall, unmarshall } = require('aws-sdk/util-dynamodb');
  1. 删除项目中的node_modules目录,在EC2环境下重新执行npm install安装依赖,不要直接上传本地的node_modules。

方案2:给AWS SDK v3补充配置

如果你确实需要使用v3的相关能力,给v3单独配置凭证:

  1. 首先修正配置文件读取路径,避免工作目录差异导致的读取失败:
const path = require('path');
const awsConfig = require(path.join(__dirname, './config.json'));
// 原有v2配置也改成绝对路径读取
AWS.config.loadFromPath(path.join(__dirname, './config.json'));
  1. 初始化v3客户端时传入配置:
const { DynamoDB } = require('@aws-sdk/client-dynamodb');
const ddb = new DynamoDB({
  region: awsConfig.region,
  credentials: {
    accessKeyId: awsConfig.accessKeyId,
    secretAccessKey: awsConfig.secretAccessKey
  }
});

方案3:EC2环境最优实践(推荐)

EC2上部署不建议硬编码密钥,你可以给EC2实例绑定具备DynamoDB操作权限的IAM角色,AWS SDK的默认凭证链会自动读取实例角色的凭证,不需要再维护config.json里的敏感凭证信息,同时彻底避免凭证泄露风险。

额外检查项

  • 确认EC2上config.json的文件权限,确保运行Node进程的用户有读取权限,可执行chmod 644 config.json修正权限。
  • 检查Node进程启动的工作目录,确保和本地测试时的目录结构一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:09:04