aws lambda中的简单node.js示例

时间:2015-06-04 07:19:15

标签: node.js amazon-web-services amazon-s3

我正在尝试使用aws lambda发送一个简单的请求。

我的模块结构如下:

mylambda
|-- index.js
|-- node_modules
|   |-- request

我将文件压缩并将其上传到lambda。

然后我调用它,它返回以下错误。 "errorMessage": "Cannot find module 'index'"

以下是index.js文件的内容

var request = require('request');

exports.handler = function(event, context) {

    var headers = { 'User-Agent': 'Super Agent/0.0.1', 'Content-Type': 'application/x-www-form-urlencoded' }

    // Configure the request
    var options = {
        url: 'https://myendpoint',
        method: 'POST',
        headers: headers,
        form: {'payload': {"text":""} }
    }

    // Start the request
    request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body)
        }
    })

    console.log('value1 =', event.key1);
    context.succeed(event.key1);  // Echo back the first key value
};

感谢任何帮助,谢谢

3 个答案:

答案 0 :(得分:7)

现在全部工作,我必须在高级设置中增加超时秒,因为它花费的时间超过3秒。

此外,我必须确保我的节点模块已正确安装。在试图找出问题时,我搞砸了请求模块。

要重新安装模块,我删除了然后重新安装请求

  • 已删除 node_modules
  • npm init
  • 在package.json中添加了依赖项"request" : "*"
  • npm install。压缩拉链并上传,现在全部正常工作。 :)

答案 1 :(得分:2)

您必须仅压缩和上传子文件夹,而不是根文件夹。您必须按照示例压缩以下文件夹,然后上传:

|-- index.js
|-- node_modules
    |-- request

答案 2 :(得分:1)

任务:编写aws lamda函数:

我如何看待我们:

  1. 我们在aws编辑器中编写代码并运行该代码

  2. 未按预期运行,请在其中放置许多控制台(因为我们无法调试代码)

  3. 等待几秒钟,然后在另一个窗口中查看控制台,不断更改窗口,直到我们解决问题为止

    4。更换窗户需要很多时间和精力。

为什么不能?

  1. 在我们的服务器(不是aws编辑器)中编写代码,然后将该代码发送到aws。

是的,我们可以。

  1. 新功能(https://davidwalsh.name/new-function)因祸得福 概念。

示例代码:

let fs = require('fs');
const aws = require("aws-sdk");
const s3 = new aws.S3(),
    async = require('async');
aws.config = {
    "accessKeyId": "xyz",
    "secretAccessKey": "xyz",
    "region": "us-east-1"
};
fs.readFile('path to your code file', 'utf-8', async (err, code) => {
    if (err) return res.status(500).send({ err });
    async function uploadToS3(docs) { (only this function has to go into aws editor)
        let func = new Function('docs', "aws", "s3", 'async', `${code}`);
        return func(docs, aws, s3, async); 
    }
    let resp = await uploa`enter code here`dToS3(req.files.docs);(this line will call aws lambda function from our server)
    return res.send({ resp });
});

我在文件中编写的代码:

docs = Array.isArray(docs) ? docs : [docs]
let funArray = [];
docs.forEach((value) => {
    funArray.push(function (callback) {
        s3.upload({
            Bucket: "xxx",
            Body: value.data,
            Key: "anurag" + "/" + new Date(),
            ContentType: value.mimetype
        }, function (err, res) {
            if (err) {
                return callback(err, null);
            }
            return callback(null, res);
        });
    });
});
return new Promise((resolve, reject) => {
    async.parallel(funArray, (err, data) => {
        resolve(data);
    });
});

好处:

  1. 由于整个代码将用我们熟悉的IDE编写,因此调试起来很容易。
  2. aws编辑器只需输入两行(不是很容易)。
  3. 很容易修改/更新代码(因为代码将在我们的仓库中,我们甚至不必去AWS编辑器)。
  4. 是的,我们可以使用其他第三方库,但是以上内容是用纯JavaScript编写的,在那里没有使用第三方库。
  5. 此外,在这里您不必部署代码。
  6. 有时我们的库总大小增加到5 MB,而AWS lambda编辑器停止支持它。 它也将解决此问题,现在我们将仅从库中发送所需的函数,而不是整个库 平均而言,一个异步库包含大约100多个函数,但是我们使用1-2个函数。因此,现在我们将仅发送将要使用的功能。

注意:

  1. 我搜索了很多东西,但是没有地方找到这种东西。
  2. 以上代码段会将文档上传到s3存储桶。