Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

378
Vistas
Función AWS Lambda python para analizar json de S3 y almacenar en DynamoDB

Estoy tratando de escribir una función lambda que se activa cada vez que se carga un archivo json en un depósito s3. Se supone que la función analiza el archivo y lo almacena inmediatamente en DynamoDB. Creé una tabla llamada 'datos' con la clave principal establecida como 'fecha'. Esto es lo que tengo para la función hasta ahora:

 import boto3 import json s3_client = boto3.client('s3') dynamodb = boto3.resource('dynamodb') def lambda_handler(event, context): bucket = event['Records'][0]['s3']['bucket']['name'] json_file_name = event['Records'][0]['s3']['object']['key'] json_object = s3.Bucket(bucket).Object(json_file_name) jsonFileReader = json_object['Body'].read() jsonDict = json.loads(jsonFileReader) table = dynamodb.Table('data') table.put_item(Item = jsonDict)

Aquí hay un ejemplo de un archivo json que estoy tratando de usar:

 { "date": "2020-06-07 21:00:34.284421", "ConfirmedCases": 7062067, "ActiveCases": 3206573, "RecoveredCases": 3450965, "Deaths": 404529 }

Desafortunadamente, cada vez que pruebo el código, arroja este error:

 [[ERROR] TypeError: string indices must be integers Traceback (most recent call last): File "/var/task/lambda_function.py", line 7, in lambda_handler bucket = event'Records'][0]['s3']['bucket']['name']]

Alguien sabe cómo resolver este problema? He perdido tanto tiempo tratando de resolver esto y todavía no puedo :/

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su error es de cualquiera de estas líneas.

 bucket = event['Records'][0]['s3']['bucket']['name'] json_file_name = event['Records'][0]['s3']['object']['key']

Sin embargo, son correctos . Esta es la forma válida de acceder al nombre del depósito y la clave del objeto desde el evento generado por las notificaciones de S3.

Me parece que otra cosa es activar tu función . O usa la opción Test en la consola y proporciona un objeto de event incorrecto, o hay algún otro evento que activa la lambda con un evento que no es S3.

Como solución rápida, puede hacer lo siguiente. El siguiente código terminará si el objeto del event no contiene Records :

 def lambda_handler(event, context): if 'Records' not in event: print(event) # good to check what event you get return # and the rest of code
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda