![](/img/trans.png)
[英]AWS Lambda Consumes time when uploading files to S3 using node.js
[英]Uploading files to AWS S3 using Lambda is not working
我正在尝试使用 lambda 将文件上传到 S3。 该代码是关于从 web 中抓取数据并制作 CSV 文件。
原始代码(没有 AWS,只需抓取并创建 CSV)经过测试并且工作正常。 所以我稍微修改了它以使用 lambda 和 s3。
我创建 S3 存储桶。 我制作了 lambda 层。 我创建了 IAM 角色。(AmazonS3FullAccess)并将其附加到 lambda。
我想我做了我需要的一切。 当我单击测试按钮时,会打印“成功”。 但是,当我检查我的 S3 存储桶时,什么也没有。
有什么我错过的吗? 谢谢。
这是我的 lambda 代码。
const request = require('request');
const Iconv = require('iconv').Iconv;
const cheerio = require('cheerio');
const ObjectsToCsv = require('objects-to-csv');
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const today = new Date;
const date_string = `${today.getMonth()}/${today.getDate()}`;
const BUCKET_NAME = 'naverfinance';
exports.handler = async (event) => {
class Stock {
constructor(
name, rank, price, change_inValue, change_inPercent, updown) {
this.name = name;
this.rank = rank;
this.price = price;
this.change_inValue = change_inValue;
this.change_inPercent = change_inPercent;
this.updown = updown;
}
}
request({ url: 'https://finance.naver.com/sise/sise_quant.nhn', encoding: null }, function(response, body) {
const euckr_to_utf8 = new Iconv('euc-kr', 'utf8');
const koreanHTML = euckr_to_utf8.convert(body).toString();
const $ = cheerio.load(koreanHTML);
let name, rank, price, change_inValue, change_inPercent, updown;
const table = $('.type_2').children('tbody').children('tr');
//3번쨰부터 5개, 빈라인 3개, 이렇게 해서 종목 100개
for(let i = 1; i < table.length; ++i) {
const tr = table[i];
if(tr.children.length === 1) {
continue;
}
const tds = tr.children;
for(let j = 0; j < tds.length; ++j) {
const td = tds[j];
if(td.type == 'text') {
continue;
}
const td_data = td.children;
if(j == 1) {
rank = td_data[0].data;
}
else if(j == 3) {
name = td_data[0].children[0].data;
}
else if(j == 5) {
price = parseInt(td_data[0].data.replace(/[,]/g,''));
}
else if(j == 7) {
let data = 0;
if(td_data[2].children != undefined) {
data = parseInt(td_data[2].children[0].data.replace(/[\n\t,]/g,''));
}
change_inValue = data;
}
else if(j == 9) {
change_inPercent = td_data[1].children[0].data.replace(/[\n\t%]/g,'');
if (change_inPercent.indexOf('.') !== -1) { //소수
change_inPercent = parseFloat(change_inPercent.replace(/,/g,''));
}
else { //정수
change_inPercent = parseInt(change_inPercent.replace(/,/g,''));
}
if(change_inPercent < 0) {
updown = '하락';
change_inValue = -change_inValue;
}
else if(change_inPercent > 0) {
updown = '상승';
change_inValue = change_inValue;
}
else {
updown = '그대로';
change_inValue = 0;
}
const stock = new Stock(
name, rank, price, change_inValue, change_inPercent, updown);
s3.putObject({
Bucket: BUCKET_NAME,
Key: date_string,
ContentType: 'text/plain',
Body : 'test' //new ObjectsToCsv(stock).toString()
})
}
}
}
});
};
删除异步后。
Response:
{
"errorType": "Error",
"errorMessage": "Bad argument.",
"trace": [
"Error: Bad argument.",
" at convert (/opt/nodejs/node_modules/iconv/index.js:103:11)",
" at Iconv.convert (/opt/nodejs/node_modules/iconv/index.js:63:12)",
" at Request._callback (/var/task/index.js:28:42)",
" at Request.self.callback (/opt/nodejs/node_modules/request/request.js:185:22)",
" at Request.emit (events.js:315:20)",
" at Request.EventEmitter.emit (domain.js:482:12)",
" at Request.<anonymous> (/opt/nodejs/node_modules/request/request.js:1154:10)",
" at Request.emit (events.js:315:20)",
" at Request.EventEmitter.emit (domain.js:482:12)",
" at IncomingMessage.<anonymous> (/opt/nodejs/node_modules/request/request.js:1076:12)"
]
}
我认为因为您使用的是异步处理程序,所以您需要返回某种响应或 promise
https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.