2
votes

I am very new to AWS Serverless and have chosen to use Python for my Lambda handler

When I use API Gateway to query DynamoDB to get an item in a table, if it doesn't exist, it throws this error. I am just trying to get it to return NOTHING if the item doesn't exist. Here is the error:

{
    "errorMessage": "'Item'",
    "errorType": "KeyError",
    "stackTrace": ["  File \"/var/task/lambda_function.py\", line 11, in lambda_handler\n    json_body = response['Item']\n"]
}

I have searched high and low to try and find properties in the DynamoDB response that would tell me there are no items, then I could write an If statement based on that.

Here is my Lambda code:

import json
import boto3

def lambda_handler(event, context):
    client = boto3.resource("dynamodb")
    table = client.Table("pnr-snapshot")
    pnrID = event['pnrID']
    
    response = table.get_item(Key={'pnrID': pnrID})
    json_body = response['Item']
    return json_body

I thought maybe adding a try into the code would help but instead I get this syntax error:

{"errorMessage":"Syntax error in module 'lambda_function': unexpected EOF while parsing (lambda_function.py, line 12)","errorType":"Runtime.UserCodeSyntaxError","stackTrace":[" File "/var/task/lambda_function.py" Line 12\n \t\treturn json_body\n"]}

import json
import boto3

def lambda_handler(event, context):
    client = boto3.resource("dynamodb")
    table = client.Table("pnr-snapshot")
    pnrID = event['pnrID']

    try:
        response = table.get_item(Key={'pnrID': pnrID})
        json_body = response['Item']
        return json_body

I'd really appreciate any help...

1

1 Answers

2
votes

Could not do the following check for if the key exists?

import json
import boto3

def lambda_handler(event, context):
    client = boto3.resource("dynamodb")
    table = client.Table("pnr-snapshot")
    pnrID = event['pnrID']
    
    response = table.get_item(Key={'pnrID': pnrID})
    if 'Item' in response:
        json_body = response['Item']
        return json_body
    else:
        return ''