繁体   English   中英

使用 Lambda 将文件上传到 AWS S3 不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM