You are on page 1of 18

Capacitación Usach

Laboratorio 4: Amazon S3 and AWS


Lambda Challenge

Nombre: Guillermo Echague


Profesor: David Victoria
Ayudante: Jocelyn Poblete
Curso: Herramientas DevOps en AWS
Fecha: 28-06-2023
Contenido
Introducción ................................................................................................................................. 1
Objetivos de la actividad............................................................................................................. 1
Descripción de la actividad ......................................................................................................... 1
Desarrollo..................................................................................................................................... 2
Conclusión ................................................................................................................................. 14
Anexos ....................................................................................................................................... 15
Introducción

La siguiente es una descripción detallada de los cambios y tareas realizadas para migrar
un sistema heredado a la nube utilizando AWS Lambda y Amazon S3. El sistema
originalmente aceptaba cargas de archivos CSV y realizaba un procesamiento específico.
Como parte de la migración, se ha decidido cambiar el nombre de la carpeta de
almacenamiento de archivos procesados y aumentar la longitud del identificador asignado
a cada archivo. El objetivo principal de este informe es documentar las modificaciones
realizadas y garantizar el correcto funcionamiento del sistema basado en la nube.

Objetivos de la actividad
Crear un depósito de Amazon S3 para almacenar los archivos CSV.
Implementar una función Python de AWS Lambda utilizando la plantilla preexistente.
Modificar el código de la función Lambda para generar identificadores aleatorios de 12
caracteres.
Probar el sistema basado en la nube cargando un archivo CSV de prueba y verificar que la
función Lambda se active correctamente.

Descripción de la actividad

Una empresa tiene un sistema heredado que acepta cargas de archivos CSV (valores
separados por comas). La empresa se está preparando para migrar el sistema a la nube.
El nuevo sistema basado en la nube utilizará un activador basado en eventos en un depósito
de Amazon S3 para ejecutar una función de AWS Lambda y realizar el procesamiento de
archivos. Cuando se carga un archivo CSV, se examina cada línea del archivo. La línea se
copia en un nuevo archivo ubicado en una carpeta con el nombre del primer campo de la
línea.
En el sistema heredado, se asignaba un identificador aleatorio a cada archivo recién creado
después del procesamiento. Este identificador tiene seis caracteres. El sistema heredado
almacenaba archivos procesados separados en un directorio llamado "split". Se espera que
el nuevo sistema basado en la nube maneje una gran cantidad de cargas de archivos CSV
en el futuro.
Se ha decidido realizar los siguientes cambios:
Cambie el nombre de la carpeta que almacena archivos separados de división a salida
Aumente el número de caracteres en el identificador aleatorio de seis a doce
Se le ha encomendado lo siguiente:
Creación de un depósito de Amazon S3

1
Implementación de una función Python AWS Lambda utilizando una implementación
preexistente
Modificar el código de función para generar identificadores aleatorios de 12 caracteres
Probar el sistema basado en la nube cargando un archivo CSV de prueba para asegurarse
de que se activa la función AWS Lambda
Se debe crear una función de AWS Lambda python denominada s3-lambda con la
implementación predeterminada de AWS Lambda.

Desarrollo

1. Creación del depósito de Amazon S3:


Se creó un depósito de Amazon S3 para almacenar los archivos CSV. Este depósito servirá
como punto de entrada para el procesamiento de los archivos en la nube.

2
3
4
2. Implementación de la función Python de AWS Lambda:
Se utilizó la implementación predeterminada de AWS Lambda para desarrollar la función
requerida. Esta función se configuró para que se active mediante un activador basado en
eventos en el depósito de Amazon S3. El código de la función fue adaptado para realizar el
procesamiento de los archivos CSV y generar los identificadores aleatorios de 12
caracteres.

5
6
7
8
9
3. Modificación del código de la función Lambda:
Se modificó la función Lambda para cambiar el nombre de la carpeta de almacenamiento
de archivos procesados de "split" a "salida". Además, se actualizó la longitud del
identificador aleatorio de 6 a 12 caracteres.

def random_id():

return "".join(random.choices(string.ascii_uppercase + string.digits, k=ID_LENGTH))

ID_LENGTH de 6 a 12

10
4. Prueba del sistema basado en la nube:
Se realizó una prueba del sistema cargando un archivo CSV de prueba en el depósito de
Amazon S3. Se verificó que la función Lambda se activara correctamente y que el archivo
se procesara de acuerdo con las modificaciones realizadas. Se comprobó que se generara
un nuevo archivo en la carpeta de salida con el nombre del primer campo de cada línea del
archivo original, seguido del identificador aleatorio de 12 caracteres.

11
12
13
Conclusión

La migración del sistema heredado a la nube utilizando AWS Lambda y Amazon S3 se


realizó con éxito. Se logró cambiar el nombre de la carpeta de almacenamiento de archivos
procesados y aumentar la longitud del identificador aleatorio. La función Lambda se activó
correctamente al cargar un archivo CSV de prueba, y se verificó que el archivo se procesara
de acuerdo con los requisitos establecidos. El sistema basado en la nube está preparado
para manejar una gran cantidad de cargas de archivos CSV en el futuro, brindando una
solución escalable y eficiente para el procesamiento de datos.

14
Anexos

A continuación, se muestra el código Python de procesamiento de CSV que deberá usar para
completar el desafío:

===============================

import io

import boto3

import string

import random

s3 = boto3.client("s3")

INPUT_PREFIX = "input"

OUTPUT_PREFIX = "split"

ID_LENGTH = 6

def random_id():

return "".join(random.choices(string.ascii_uppercase + string.digits, k=ID_LENGTH))

def separate_object(bucket, key):

body = s3.get_object(Bucket=bucket, Key=key)["Body"].read().decode("utf-8")

output = {}

for line in io.StringIO(body):

fields = line.split(",")

output.setdefault(fields[0], []).append(line)

return output

def write_objects(objects, bucket, key):

file_name = key.split("/")[-1]

for prefix in objects.keys():

identifier = random_id()

s3.put_object(

Body=",".join(objects[prefix]),

Key=f"{OUTPUT_PREFIX}/{prefix}/{identifier}-{file_name}",

15
Bucket=bucket,

def lambda_handler(event, context):

record = event["Records"][0]["s3"]

bucket = record["bucket"]["name"]

key = record["object"]["key"]

if key.startswith(INPUT_PREFIX):

objects = separate_object(bucket, key)

write_objects(objects, bucket, key)

return "OK"

================DATA===============

high,data1,10

medium,data2,20

low,data3,30

===============================

16

You might also like