【问题标题】:Lambda function unable to create file on S3Lambda 函数无法在 S3 上创建文件
【发布时间】:2019-04-22 20:01:29
【问题描述】:

我编写了以下代码用于 AWS Lambda 函数。目标是

  1. 从 MSSQL DB 中获取数据
  2. 从 S3 存储桶中的该数据创建一个文件。
  3. 在 FTP 服务器上创建一个文件。

这一切工作得很好,但只要我将此代码推送到 AWS Lambda,它就会失败。它能够获取数据但无法在 S3 上创建文件。完整代码如下:

"use strict";

var express = require('express');
var app = express();
var config = require('./config/dev');
var sql = require("mssql");
var AWS = require('aws-sdk');
var PromiseFtp = require('promise-ftp');
var fs = require('fs');

exports.handler = (event, context, callback) => {
        CreateFileOnS3("This is a sample text file created by lambda function", event, context, callback);
};


function CreateFileOnS3(fileData, event, context, callback) {
    const fileName = generateFileName();
    console.log('Sending file to S3...');
    const s3 = new AWS.S3(config.awsCredentials);
    const params = {
        Bucket: config.app.s3Bucket,
        Key: fileName,
        Body: fileData
    };
    s3.upload(params, function (s3Err, data) {
        if (s3Err) {
            console.log('There was an error creating file on S3');
            callback(true, 'There was an error creating file on S3');
        }
        else {
            console.log(`File uploaded successfully at ${data.Location}`);
            callback(null, 'File uploaded successfully at ${data.Location}');
        }
    });
}

function generateFileName() {
    var _d = new Date(),
        y = _d.getFullYear(),
        m = _d.getMonth() + 1,
        d = _d.getDate();
    return y + '-' + (m < 10 ? '0' + m : m) + '-' + (d < 10 ? '0' + d : d) + '.txt';
}

以下是 CloudWatch 日志的内容:

10:38:51
START RequestId: 0965c2ef-94a2-439e-b61b-83f17b5ad3d3 Version: $LATEST

10:38:51
2019-04-22T10:38:51.737Z    0965c2ef-94a2-439e-b61b-83f17b5ad3d3
Fetching data from database...

10:38:53
2019-04-22T10:38:53.364Z    0965c2ef-94a2-439e-b61b-83f17b5ad3d3     
Sending file to S3...

10:39:21
END RequestId: 0965c2ef-94a2-439e-b61b-83f17b5ad3d3

10:39:21
REPORT RequestId: 0965c2ef-94a2-439e-b61b-83f17b5ad3d3  Duration: 30030.33 ms   Billed Duration: 30000 ms Memory Size: 512 MB   Max Memory Used: 95 MB

10:39:21
2019-04-22T10:39:21.760Z 0965c2ef-94a2-439e-b61b-83f17b5ad3d3 Task timed out after 30.03 seconds

内存:2048MB 超时:60 秒

编辑:更新后的代码仅将要创建的字符串作为文本文件发送到 S3 上,这也不起作用。

【问题讨论】:

  • 将 Lambda 函数超时时间增加到 900 秒(最大值),为您的代码添加更多检查点,然后自行调试。
  • 你的 lambda 函数的角色是否有权限在 S3 上创建文件?
  • @Brian 该角色拥有管理员权限。

标签: node.js aws-lambda


【解决方案1】:

检查在 lambda 脚本上设置的超时。将其增加到 2 分钟。

【讨论】:

  • 已经尝试过该选项,但增加时间也不起作用。
  • function(s3Err, fileData)是我们上传完成后得到的回调函数。如果我们将参数命名为“data”或“fileData”,则没有问题。
猜你喜欢
  • 1970-01-01
  • 2020-12-21
  • 2021-04-05
  • 2017-08-26
  • 2020-03-27
  • 2016-05-16
  • 1970-01-01
  • 2015-12-04
  • 2016-12-02
相关资源
最近更新 更多