aws lambda 中的简单 node.js 示例
simple node.js example in aws lambda
我正在尝试使用 aws lambda 发送一个简单的请求。
我的模块结构如下:
mylambda
|-- index.js
|-- node_modules
| |-- request
我将文件压缩并上传到 lambda。
然后我调用它,它 returns 出现以下错误。 "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
};
感谢任何帮助,谢谢
现在一切正常,我不得不在高级设置中增加 Timeout(s) 秒,因为它花费的时间超过 3 秒。
此外,我还必须确保我的节点模块已正确安装。我在试图找出问题所在时弄乱了请求模块。
为了重新安装模块,我删除了然后重新安装了 request。
- 已删除node_modules
npm init
- 在 package.json、
中添加了依赖关系 "request" : "*"
npm install
。压缩 zip 并上传,现在一切正常。 :)
您只能压缩和上传子文件夹,而不是根文件夹。您必须按照您的示例压缩以下文件夹,然后上传:
|-- index.js
|-- node_modules
|-- request
任务:编写 aws lamda 函数:
我是如何看待我们的:
我们在 aws 编辑器中编写代码 运行 那
不像预期的那样运行ning,在那里放了很多控制台(因为我们不能调试我们的代码)
等待几秒钟,然后在另一个 window 中查看控制台,继续更改 windows 直到我们解决问题
4.changing windows 需要很多时间和精力。
为什么我们不能?
- 在我们的服务器(不是 aws 编辑器)中编写代码,然后将该代码发送到 aws。
是的,我们可以。
- 新功能(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);
});
});
好处:
- 由于整个代码都是用我们熟悉的IDE编写的,因此调试起来很容易。
- 只要两行代码进入 aws 编辑器(是不是很简单)。
- 很容易 modify/update 代码(因为代码将在我们的 repo 中,我们甚至可能不必去 aws 编辑器)。
- 是的,我们可以使用其他第三方库,但是上面的东西是纯写的JavaScript,那里没有使用第三方库。
- 此外,您不必在此处部署代码。
- 有时我们的库总大小增加到 5 MB,而 AWS lambda 编辑器停止支持它。
它也将解决这个问题,现在我们将只从库中发送所需的函数,而不是整个库
平均而言,异步库包含大约 100 个函数,但我们使用 1-2 个函数。所以,现在我们将只发送我们将要使用的函数。
注:
- 我找了很多,都没找到这种东西。
- 以上代码将文档上传到 s3 存储桶。
我正在尝试使用 aws lambda 发送一个简单的请求。
我的模块结构如下:
mylambda
|-- index.js
|-- node_modules
| |-- request
我将文件压缩并上传到 lambda。
然后我调用它,它 returns 出现以下错误。 "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
};
感谢任何帮助,谢谢
现在一切正常,我不得不在高级设置中增加 Timeout(s) 秒,因为它花费的时间超过 3 秒。
此外,我还必须确保我的节点模块已正确安装。我在试图找出问题所在时弄乱了请求模块。
为了重新安装模块,我删除了然后重新安装了 request。
- 已删除node_modules
npm init
- 在 package.json、 中添加了依赖关系
npm install
。压缩 zip 并上传,现在一切正常。 :)
"request" : "*"
您只能压缩和上传子文件夹,而不是根文件夹。您必须按照您的示例压缩以下文件夹,然后上传:
|-- index.js
|-- node_modules
|-- request
任务:编写 aws lamda 函数:
我是如何看待我们的:
我们在 aws 编辑器中编写代码 运行 那
不像预期的那样运行ning,在那里放了很多控制台(因为我们不能调试我们的代码)
等待几秒钟,然后在另一个 window 中查看控制台,继续更改 windows 直到我们解决问题
4.changing windows 需要很多时间和精力。
为什么我们不能?
- 在我们的服务器(不是 aws 编辑器)中编写代码,然后将该代码发送到 aws。
是的,我们可以。
- 新功能(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);
});
});
好处:
- 由于整个代码都是用我们熟悉的IDE编写的,因此调试起来很容易。
- 只要两行代码进入 aws 编辑器(是不是很简单)。
- 很容易 modify/update 代码(因为代码将在我们的 repo 中,我们甚至可能不必去 aws 编辑器)。
- 是的,我们可以使用其他第三方库,但是上面的东西是纯写的JavaScript,那里没有使用第三方库。
- 此外,您不必在此处部署代码。
- 有时我们的库总大小增加到 5 MB,而 AWS lambda 编辑器停止支持它。 它也将解决这个问题,现在我们将只从库中发送所需的函数,而不是整个库 平均而言,异步库包含大约 100 个函数,但我们使用 1-2 个函数。所以,现在我们将只发送我们将要使用的函数。
注:
- 我找了很多,都没找到这种东西。
- 以上代码将文档上传到 s3 存储桶。