Saltar al contenido

¿Cómo obtener el contenido de un archivo de texto de AWS s3 usando una función lambda?

Es importante interpretar el código de forma correcta previamente a adaptarlo a tu trabajo si tdeseas aportar algo puedes compartirlo con nosotros.

Solución:

El objeto S3 key y el nombre del depósito se pasan a su función Lambda a través de la evento parámetro. Luego puede obtener el objeto de S3 y leer su contenido.

Código básico para recuperar cubo y objeto key de la lambda event es como sigue:

exports.handler = function(event, context, callback) 
   var src_bkt = event.Records[0].s3.bucket.name;
   var src_key = event.Records[0].s3.object.key;
;

Una vez que tenga el balde y keypuede llamar a getObject para recuperar el objeto:

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

exports.handler = function(event, context, callback) 

    // Retrieve the bucket & key for the uploaded S3 object that
    // caused this Lambda function to be triggered
    var src_bkt = event.Records[0].s3.bucket.name;
    var src_key = event.Records[0].s3.object.key;

    // Retrieve the object
    s3.getObject(
        Bucket: src_bkt,
        Key: src_key
    , function(err, data) 
        if (err) 
            console.log(err, err.stack);
            callback(err);
         else 
            console.log("Raw text:n" + data.Body.toString('ascii'));
            callback(null, null);
        
    );
;

Aquí hay un ejemplo de JavaScript actualizado que usa código y promesas de estilo ES6, menos el manejo de errores:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event, context) => 
  const Bucket = event.Records[0].s3.bucket.name;
  const Key = event.Records[0].s3.object.key;
  const data = await s3.getObject( Bucket, Key ).promise();
  console.log("Raw text:n" + data.Body.toString('ascii'));
;

Varios carteles han pedido el equivalente en Java, así que aquí hay un ejemplo:

package example;

import java.net.URLDecoder;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord;

public class S3GetTextBody implements RequestHandler 

    public String handleRequest(S3Event s3event, Context context) 
        try 
            S3EventNotificationRecord record = s3event.getRecords().get(0);

            // Retrieve the bucket & key for the uploaded S3 object that
            // caused this Lambda function to be triggered
            String bkt = record.getS3().getBucket().getName();
            String key = record.getS3().getObject().getKey().replace('+', ' ');
            key = URLDecoder.decode(key, "UTF-8");

            // Read the source file as text
            AmazonS3 s3Client = new AmazonS3Client();
            String body = s3Client.getObjectAsString(bkt, key);
            System.out.println("Body: " + body);
            return "ok";
         catch (Exception e) 
            System.err.println("Exception: " + e);
            return "error";
        
    

Puedes usar data.Body.toString('ascii') para obtener el contenido del archivo de texto, asumiendo que el archivo de texto fue codificado en formato ascii. También puede pasar otros tipos de codificación a la función. Consulte Node-Buffer para obtener más detalles.

Estoy usando la función lambda con un entorno python 3.6. El siguiente código leerá el contenido de un archivo main.txt dentro del depósito my_s3_bucket. Asegúrese de reemplazar el nombre del depósito y el nombre del archivo según sus necesidades.

def lambda_handler(event, context):
    # TODO implement
    import boto3

    s3 = boto3.client('s3')
    data = s3.get_object(Bucket='my_s3_bucket', Key='main.txt')
    contents = data['Body'].read()
    print(contents)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *