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

AWS Lambda报错:无法在模块外使用import语句及模块缺失问题

解决AWS Lambda中模块导入与S3读取问题

错误原因解析

  • 使用ES模块的import语句,但Lambda默认将代码识别为CommonJS模块,触发语法错误:SyntaxError: Cannot use import statement outside a module。
  • 移除import后提示找不到aws-sdk,是对Lambda运行环境的误解——Node.js运行时(14.x及以上版本)默认内置AWS SDK v2,无需手动安装。

解决方案

方案一:使用CommonJS语法(推荐,无需额外配置)

直接删除那两行import相关代码,保持纯CommonJS写法即可,代码如下:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event) => {
    const bucketName = 'your-bucket-name';
    const objectKey = 'your-object-key';

    const params = {
        Bucket: bucketName,
        Key: objectKey
    };

    try {
        const data = await s3.getObject(params).promise();
        const objectContent = data.Body.toString('utf-8');
        console.log(objectContent);
        // 处理对象内容
    } catch (err) {
        console.log(err);
        // 错误处理
    }
};

若仍提示找不到aws-sdk,检查两点:

  • Lambda运行时是否选择Node.js
  • 是否误删const AWS = require('aws-sdk');语句

方案二:改用ES模块(适合ES语法习惯)

若坚持使用ES模块,需完成以下两步:

  1. 在代码目录创建package.json文件,声明模块类型:
{
  "type": "module"
}
  1. 改用AWS SDK v3的ES模块语法(需手动安装依赖后打包上传,或通过Lambda层引入):
import { S3 } from '@aws-sdk/client-s3';

const s3 = new S3();

export const handler = async (event) => {
    const bucketName = 'your-bucket-name';
    const objectKey = 'your-object-key';

    try {
        const data = await s3.getObject({ Bucket: bucketName, Key: objectKey });
        const objectContent = await data.Body.transformToString('utf-8');
        console.log(objectContent);
        // 处理对象内容
    } catch (err) {
        console.log(err);
        // 错误处理
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:22:35