簡體   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