es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo leer datos CSV desde S3 utilizando una función de Lambda de Node.js de AWS.

Tengo una función Node.js AWS Lambda y estoy tratando de leer registros de un archivo CSV en S3 e imprimir su contenido.

A continuación se muestra mi código para lograr lo mismo, sin embargo, obtengo Null como resultado.

Código:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const csv = require('csv-parser');
const bucket = 'awslambdabuckets';
const objectkey = 'record.csv';
const params = { Bucket: bucket, Key: objectkey };
const results = [];

exports.handler = async function (event, ctx, callback) {
    try {
        const file = s3.getObject(params).createReadStream();

        file
            .pipe(csv())
            .on('data', function (data) {
                results.push(data);
            })
            .on('end', () => {
                console.log(results);
                callback(null, results);
            });
    } catch (err) {
        console.log(err);
        callback(Error(err));
    }

};

Resultado:
Lambda Output

¿Alguien puede ayudarme a señalar cuál es el problema y cómo solucionarlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema en el código es que results.push no está empujando realmente los datos extraídos del archivo CSV en el arreglo results. Falta el paréntesis después de push. La línea corregida de código debería ser results.push(data);.

    Código:

    const AWS = require('aws-sdk');
    const s3 = new AWS.S3();
    const csv = require('csv-parser');
    const bucket = 'awslambdabuckets';
    const objectkey = 'record.csv';
    const params = { Bucket: bucket, Key: objectkey };
    const results = [];
    
    exports.handler = async function (event, ctx, callback) {
        try {
            const file = s3.getObject(params).createReadStream();
    
            file
                .pipe(csv())
                .on('data', function (data) {
                    results.push(data);
                })
                .on('end', () => {
                    console.log(results);
                    callback(null, results);
                });
        } catch (err) {
            console.log(err);
            callback(Error(err));
        }
    
    };
    

    Ahora esto debería imprimir correctamente el contenido del archivo CSV en la salida de la función Lambda.

Comments are closed.