在AWS控制台中测试Python lambda时出错



我正在尝试使用python实现lambda。当我在aws控制台测试它时,我得到了下面的错误。

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" }
测试输入

{
"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"
}
]
}

错误
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_handlern    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

错误在

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

错误:

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

看起来您假设split将返回2个元素。但这不是真的。

解决方案是不假设返回多少元素-在运行时检查split返回的列表中有多少元素