Lambda中使用@aws-sdk/client-sts遇TypeError:parseRfc3339DateTimeWithOffset非函数
AWS Lambda中使用@aws-sdk/client-sts调用AssumeRoleCommand时出现TypeError: parseRfc3339DateTimeWithOffset is not a function
问题详情
在AWS Lambda中使用@aws-sdk/client-sts调用AssumeRoleCommand时,突然抛出TypeError异常,错误信息为:
TypeError: (0 , smithy_client_1.parseRfc3339DateTimeWithOffset) is not a function
已尝试使用3.266.0和3.224.0版本的@aws-sdk/client-sts,问题仍未解决。
相关代码
const { STSClient, AssumeRoleCommand, } = require('@aws-sdk/client-sts') const stsClient = new STSClient({ region: process.env.REGION || 'eu-west-1', }) const params = new AssumeRoleCommand({ RoleArn: process.env.MARKETPLACE_RESOLVE_CUSTOMER_ROLE_ARN, RoleSessionName: `${ process.env.AWS_LAMBDA_FUNCTION_NAME }-${new Date().getTime()}`, }) const assumedRoleOutput = await stsClient.send(params)
完整报错堆栈
2023-02-08T08:07:18.684Z 1a7dd68d-da00-4b07-935c-2f6bc95f996f ERROR TypeError: (0 , smithy_client_1.parseRfc3339DateTimeWithOffset) is not a function at deserializeAws_queryCredentials (/opt/nodejs/node_modules/@aws-sdk/client-sts/dist-cjs/protocols/Aws_query.js:860:117) at deserializeAws_queryAssumeRoleResponse (/opt/nodejs/node_modules/@aws-sdk/client-sts/dist-cjs/protocols/Aws_query.js:756:32) at deserializeAws_queryAssumeRoleCommand (/opt/nodejs/node_modules/@aws-sdk/client-sts/dist-cjs/protocols/Aws_query.js:119:16) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async /opt/nodejs/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-serde/dist-cjs/deserializerMiddleware.js:7:24 at async /opt/nodejs/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-signing/dist-cjs/middleware.js:14:20 at async StandardRetryStrategy.retry (/opt/nodejs/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-retry/dist-cjs/StandardRetryStrategy.js:51:46) at async /opt/nodejs/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:5:22 at async getMarketplaceResolveCustomerRoleCredentials (/var/task/utils/marketplaceUtils.js:27:29) at async Object.resolveMarketplaceCustomer (/var/task/utils/marketplaceUtils.js:50:5) { '$metadata': { attempts: 1, totalRetryDelay: 0 }
解决方案
1. 统一@aws-sdk依赖版本
该错误大多由@aws-sdk/client-sts与依赖的@smithy/client等包版本不匹配导致。在package.json中统一所有@aws-sdk开头的依赖版本,例如:
{ "dependencies": { "@aws-sdk/client-sts": "3.200.0", "@aws-sdk/middleware-retry": "3.200.0", "@aws-sdk/middleware-serde": "3.200.0" // 其他相关aws-sdk包也统一版本 } }
2. 清理依赖并重新安装
删除本地的node_modules文件夹和package-lock.json文件,然后执行:
npm install
这能避免缓存的旧版本依赖冲突。
3. 检查Lambda层(若使用)
如果你的Lambda函数使用了层来存放依赖,确保层中的@aws-sdk相关包版本与Lambda部署包内的版本完全一致,层的依赖可能会覆盖本地依赖导致版本不兼容。
4. 降级到稳定版本
若上述方法无效,尝试降级到3.200.0版本的@aws-sdk/client-sts,该版本的序列化逻辑未引入parseRfc3339DateTimeWithOffset函数,能规避此问题。
内容的提问来源于stack exchange,提问作者Dibi91
相关产品推荐
相关产品推荐

