node.js - 如何使用 AWS Lambda 从 S3 存储桶读取大型 XML 文件,然后将其用作 HTTP 请求正文

标签 node.js amazon-web-services amazon-s3 aws-lambda

我正在编写一个 AWS Lambda,我需要使用 S3 存储桶中的 XML 文件的内容来发出 HTTP PUT 请求。只要给定的 S3 存储桶中有文件上传,就应该触发此 lambda。以下是我在 Node.js 中的代码:

exports.handler = (event, context, callback) => {
    var s3 = new AWS.S3();
    var sourceBucket = event.Records[0].s3.bucket.name;
    const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
    const params = {
        Bucket: sourceBucket,
        Key: key
    };
    s3.getObject(params, function(err, data) {
        if (err)
            console.log(err, err.stack); // an error occurred
        else {
            var body = data.Body.toString();
            const params2 = {
                url: 'http://url:port/PutFile',
                body: body
            };
            req.put(params2, function(err, res, body) {
                if(err){
                    console.log('------error------', err);
                } else{
                    console.log('------success--------', body);
                }
            });
            req('http://url:port/ResetData', function (error, response, body) {
                //Check for error
                if(error){
                    return console.log('Error:', error);
                }

                //Check for right status code
                if(response.statusCode !== 200){
                    return console.log('Invalid Status Code Returned:', response.statusCode);
                }
                    console.log(body); 

            });
    });
};

我的代码工作正常,并且对虚拟 XML 文件 (~3KB) 进行了所需的调用。但对于原来的需求,文件大小超过10MB,它返回以下异常:

RequestId: <someId> Error: Runtime exited with error: signal: killed

我尝试将 lambda 超时增加到 10 分钟,但仍然遇到相同的错误。我该如何解决这个问题?

最佳答案

问题可能是您的 lambda 内存不足,并且 aws 终止了执行。如果您查看此行上方的行:

...Error: Runtime exited with error: signal: killed

您将看到下面的行(粗体是我的):

REPORT RequestId: XXXX-XXXXX-XXXXX Duration: XXXX.XX ms Billed Duration: XXXXX ms Memory Size: 128 MB Max Memory Used: 129 MB

请注意,您使用的内存多于分配给 lambda 的大小。增加限制并重试。

关于node.js - 如何使用 AWS Lambda 从 S3 存储桶读取大型 XML 文件,然后将其用作 HTTP 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57289596/

相关文章:

amazon-web-services - E2507 IAM 策略 key 版本不存在

node.js - 在调用另一个函数的函数中处理 UnhandledPromiseRejectionWarning

node.js - 如何在odoo和node js中获取当前登录的用户ID

amazon-s3 - 链接到公共(public)文件夹

amazon-web-services - 在 AWS 中,为什么 NLB 可以提供静态 IP 地址而 ALB 不能?

ruby-on-rails - Rails 3,回形针 + S3 - 如何存储实例并保护访问

node.js - 替换文档不得包含原子运算符

javascript - 使用 Node bcrypt 在 mysql 中散列和存储密码后用户登录的最佳实践

amazon-web-services - Amazon S3 文件夹级别权限

django - 使用 S3 和设置 document.domain 时 TinyMCE 弹出窗口未加载