ani
ani

Reputation: 37

Why Amazon Lambda function throws key error?

I have this lambda function

    import json
    import boto3
def lambda_handler(event, context):
    print("event:::")
    print(event)
    connection_id = event['requestContext']['connectionId']
    username = event['queryStringParameters']['username']

    dynamodb = boto3.resource('dynamodb')
    table1 = dynamodb.Table('table')
    table1.put_item(
        Item={
            'connection_id': connection_id,
            'username': username
           # 'message': message

        }
        )
    return {
        'statusCode': 200
    }

when I test it throws this

Test Event Name
dd

    Response
    {
      "errorMessage": "'requestContext'",
      "errorType": "KeyError",
      "requestId": "3105164b-79ac-4881-9c61-259ac437c34c",
      "stackTrace": [
        "  File \"/var/task/lambda_function.py\", line 8, in lambda_handler\n    connection_id = event['requestContext']['connectionId']\n"
      ]
    }

Function Logs

START RequestId: 3105164b-79ac-4881-9c61-259ac437c34c Version: $LATEST
event:::
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
[ERROR] KeyError: 'requestContext'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 8, in lambda_handler
    connection_id = event['requestContext']['connectionId']END RequestId: 3105164b-79ac-4881-9c61-259ac437c34c
REPORT RequestId: 3105164b-79ac-4881-9c61-259ac437c34c  Duration: 1.23 ms   Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 51 MB

Request ID
3105164b-79ac-4881-9c61-259ac437c34c

my function works when I remove keys,but with keys, it throws the above error why does this happen if the python code is correct?

..............................................................................

Upvotes: 1

Views: 4111

Answers (1)

JANO
JANO

Reputation: 3066

Your test execution needs input values. You can see in your error that the test used the default input {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}. You have to change the test input to a JSON string that contains the connection_id and queryStringParameters in the correct format.

It seems that you use Lambda in combination with the API Gateway. The gateway usually creates the event input. You can also create a test in the API Gateway, where you can specify the query parameters.

Upvotes: 4

Related Questions