0

I'm trying to implment a lambda using python. I'm getting the error below when testing it in the aws console.

lambda_handler

from datetime import datetime
import json
# import os
import boto3

DATA_ENGINEERING_BUCKET = "kinesis-archive"
RATE_PATH = "archive/rates"
s3_client = boto3.client('s3')

def lambda_handler(event, context):
    for record in event["Records"]:
        print(f"Event: {record['eventName']}/{record['eventID']}")
        table_arn, _ = record["eventSourceARN"].split("/stream")
        if record["PK"].startswith('CLASS'):
            key = '#'.join([record['PK'], record['SK']])
            s3_client.put_object(
                Body = json.dumps(record),
                Bucket = DATA_ENGINEERING_BUCKET,
                Key= '/'.join([RATE_PATH, key])
            )
    return { "statusCode": 200, "body": "OK" }

test input

{
  "Records": [
    {
      "kinesis": {
        "partitionKey": "partitionKey-03",
        "kinesisSchemaVersion": "1.0",
        "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0IDEyMy4=",
        "sequenceNumber": "49545115243490985018280067714973144582180062593244200961",
        "approximateArrivalTimestamp": 1428537600
      },
      "eventSource": "aws:kinesis",
      "eventID": "shardId-000000000000:49545115243490985018280067714973144582180062593244200961",
      "invokeIdentityArn": "arn:aws:iam::EXAMPLE",
      "eventVersion": "1.0",
      "eventName": "aws:kinesis:record",
      "eventSourceARN": "arn:aws:kinesis:EXAMPLE",
      "awsRegion": "us-east-1",
      "PK": "CLASS#CA",
      "SK": "1"
    }
  ]
}

error

Response
{
  "errorMessage": "not enough values to unpack (expected 2, got 1)",
  "errorType": "ValueError",
  "requestId": "d998cbd1-d537-4f24-8e30-65f7c350cf07",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 17, in lambda_handler\n    table_arn, _ = record[\"eventSourceARN\"].split(\"/stream\")\n"
  ]
}

Function Logs
START RequestId: d998cbd1-d537-4f24-8e30-65f7c350cf07 Version: $LATEST
Event: aws:kinesis:record/shardId-000000000000:49545115243490985018280067714973144582180062593244200961
[ERROR] ValueError: not enough values to unpack (expected 2, got 1)
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 17, in lambda_handler
    table_arn, _ = record["eventSourceARN"].split("/stream")END RequestId: d998cbd1-d537-4f24-8e30-65f7c350cf07
REPORT RequestId: d998cbd1-d537-4f24-8e30-65f7c350cf07  Duration: 1.41 ms   Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 67 MB  
XRAY TraceId: 1-614ccd64-284f0f0f425eb6004bb5e1d0   SegmentId: 1fbd881072d3ec61 Sampled: true

Request ID
d998cbd1-d537-4f24-8e30-65f7c350cf07
3
  • 1
    You left out the error message. Commented Sep 23, 2021 at 19:02
  • @MarkB Thanks I added it Commented Sep 23, 2021 at 19:05
  • @AntarrByrd - See my answer :-) Commented Sep 23, 2021 at 19:07

1 Answer 1

2

The error is below

d = {"eventSourceARN": "arn:aws:kinesis:EXAMPLE"}
table_arn, _ = d["eventSourceARN"].split("/stream")

Error:

ValueError: not enough values to unpack (expected 2, got 1)

It looks like you assume that the split will return 2 elements. But it is not true.

the solution is not to assume how many elements to return - check in runtime how many elements you have in the list that is returned by split

Sign up to request clarification or add additional context in comments.

1 Comment

it means that you did not change the lambda code ... Start by testing in on your local env. (laptop,etc) and pass the payload you are expected. Once it is stable - upload it to AWS.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.