在AWS Lambda中使用@aws-sdk/signature-v4时遇TypeError错误
TypeScript Lambda中@aws-sdk/signature-v4报"hashConstructor is not a constructor"的解决方法
错误现象
在TypeScript环境下开发AWS Lambda,使用@aws-sdk/signature-v4包时,部署后在Lambda控制台运行遇到以下错误:
{ "errorType": "TypeError", "errorMessage": "hashConstructor is not a constructor", "trace": [ "TypeError: hashConstructor is not a constructor", " at getPayloadHash (/var/task/node_modules/@aws-sdk/signature-v4/dist-cjs/getPayloadHash.js:17:26)", " at SignatureV4.signRequest (/var/task/node_modules/@aws-sdk/signature-v4/dist-cjs/SignatureV4.js:93:71)" ] }
排查过程
- 确认这是
@aws-sdk/signature-v4的常见模块导入类问题 - 尝试使用
@aws-crypto/sha256-js作为哈希构造器解决方案,同时在tsconfig.json中设置了"esModuleInterop": true,但问题未解决 - 初始采用的导入方式:
import * as crypto from "@aws-crypto/sha256-js"; const { Sha256 } = crypto;
- 打印
SignatureV4实例时,发现传入的Sha256为undefined,定位到是导入方式错误导致的问题
解决方案
修正@aws-crypto/sha256-js的导入方式即可解决问题:
有效导入方式:
import crypto from "@aws-crypto/sha256-js"; const { Sha256 } = crypto;
之后正常初始化SignatureV4实例即可:
const signer = new SignatureV4({ credentials: defaultProvider(), region: AWS_REGION, service: "appsync", sha256: Sha256, });
内容的提问来源于stack exchange,提问作者Gavin Coulson
相关产品推荐
相关产品推荐

