day*_*mer 29 amazon-s3 amazon-web-services node.js aws-lambda aws-cdk
我正在尝试S3
通过aws-sdk
我的 lambda 函数进行访问。
import S3 from 'aws-sdk/clients/s3';
const s3 = new S3();
const { Contents: results } = await s3.listObjects({ Bucket: process.env.DOCUMENTS_BUCKET_NAME! }).promise()
Run Code Online (Sandbox Code Playgroud)
我也使用命令成功部署了它cdk deploy
。但是当我测试时,我收到以下错误
2022-11-23T15:53:40.891Z undefined ERROR Uncaught Exception
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module 'aws-sdk'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/index.mjs",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module 'aws-sdk'",
"Require stack:",
"- /var/task/index.js",
"- /var/runtime/index.mjs",
" at _loadUserApp (file:///var/runtime/index.mjs:1000:17)",
" at async UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:1035:21)",
" at async start (file:///var/runtime/index.mjs:1200:23)",
" at async file:///var/runtime/index.mjs:1206:1"
]
}
Run Code Online (Sandbox Code Playgroud)
根据文档,aws-sdk
在运行时始终可用。
有谁知道我做错了什么?
非常感谢
Lei*_*son 35
如果您的 lambda 运行时是 nodejs18.x,我的理解是 SDK v2 不包含在运行时中。
因此,最好的解决方案是切换到 v3 SDK https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/
或者,如果您使用 webpack 并且通常排除使用以下内容捆绑 aws-sdk,则作为短期解决方法:
externals: {
'aws-sdk': 'aws-sdk'
},
Run Code Online (Sandbox Code Playgroud)
然后只需将外部内容从 webpack.config.js 中删除,它就会被捆绑,但当然会让你的 lambda 变得更大,所以不理想
或者短期使用nodejs16.x以下版本
更新的链接
谢谢@jarmod,我需要以下依赖项
@aws-sdk/client-s3
Run Code Online (Sandbox Code Playgroud)
我的修复提交可以在这里找到
归档时间: |
|
查看次数: |
52399 次 |
最近记录: |