I ran into a little issue today parsing a S3 SQS event that was sent to Lambda via a SQS trigger. I assumed the incoming event to Lambda was 100% of type dict. Given this, I assumed I could pull the bucket name and key using this syntax.
bucketname = event['Records'][0]['body']['Records'][0]['s3']['bucket']['name'] objectname = event['Records'][0]['body']['Records'][0]['s3']['object']['key']
As it turns out the incoming event is not 100% of type dict and I got the following error.
string indices must be integers
The Records after the body ([‘Records’][0][‘body’]) are of type str. Below is the updated code to pull the bucket name and key from the incoming event.
event_body_records_string = event['Records'][0]['body'] event_body_records_dict = json.loads(event_body_records_string) bucketname = event_body_records_dict['Records'][0]['s3']['bucaket']['name'] objectname = event_body_records_dict['Records'][0]['s3']['object']['key']
Now everything works out great!!!
