使用serverless-offline-sns搭配@aws-sdk/client-sns v3时仍加载凭证的问题
解决serverless-offline-sns与@aws-sdk/client-sns v3的凭证加载问题
问题根源
AWS SDK v3的凭证链校验逻辑比v2更严格,本地使用serverless-offline-sns时,SDK会默认尝试加载真实AWS凭证(如环境变量、本地配置文件等),但本地测试场景不需要这些真实凭证,从而触发加载失败报错;而v2会自动兼容本地环境的凭证缺失情况。
可行解决方案
方案1:显式配置虚拟凭证
初始化SNS客户端时,直接传入虚拟的凭证参数,跳过真实凭证校验:
import { SNS } from "@aws-sdk/client-sns"; const sns = new SNS({ endpoint: "http://127.0.0.1:4002", region: 'ap-southeast-1', credentials: { accessKeyId: "dummy", secretAccessKey: "dummy" } }); const messageData = { Message: "message", TopicArn: process.env.SnsTopicArn!, MessageDeduplicationId: uuid.v4(), MessageGroupId:'group' }; const resp = await sns.publish(messageData);
方案2:禁用凭证获取逻辑
借助@aws-sdk/credential-provider-node提供的noCredentials方法,直接关闭凭证获取流程:
import { SNS } from "@aws-sdk/client-sns"; import { noCredentials } from "@aws-sdk/credential-provider-node"; const sns = new SNS({ endpoint: "http://127.0.0.1:4002", region: 'ap-southeast-1', credentials: noCredentials() });
方案3:通过环境变量配置
启动应用前设置以下环境变量,让SDK自动读取虚拟凭证,无需修改代码:
export AWS_ACCESS_KEY_ID=dummy export AWS_SECRET_ACCESS_KEY=dummy
验证步骤
修改完成后重启serverless-offline服务,调用消息发布代码,即可正常与serverless-offline-sns交互,不再出现凭证加载错误。
内容的提问来源于stack exchange,提问作者Divyesh Bhalani
相关产品推荐
相关产品推荐

