You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS控制台测试Python Lambda触发值解包错误问题排查

错误原因

报错指向代码第17行的table_arn, _ = record["eventSourceARN"].split("/stream")语句:

  • 你当前测试用例中eventSourceARN字段的值为arn:aws:kinesis:EXAMPLE,不包含/stream子串
  • 调用split("/stream")后只会返回1个元素,无法解包赋值给2个变量,因此触发ValueError: not enough values to unpack (expected 2, got 1)错误
  • 额外观察:你拆分得到的table_arn变量在后续代码中没有被使用,这行逻辑属于冗余代码

解决方案

方案1:删除冗余代码(最简便)

直接删掉没用的ARN拆分行即可,修改后的完整代码如下:

from datetime import datetime
import json
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']}")
        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" }

方案2:保留ARN解析逻辑

如果后续业务需要用到Kinesis流ARN,有两种修复方式:

  1. 修改测试用例:真实Kinesis流的ARN标准格式为arn:aws:kinesis:<区域>:<账号ID>:stream/<流名称>,把测试用例中eventSourceARN的值替换为符合格式的内容即可,例如:
    "eventSourceARN": "arn:aws:kinesis:us-east-1:123456789012:stream/test-kinesis-stream"
    
  2. 优化拆分逻辑:兼容不含/stream的ARN场景,避免解包失败:
    # 最多拆分1次,无匹配内容时直接用完整ARN作为table_arn
    arn_parts = record["eventSourceARN"].split("/stream", 1)
    table_arn = arn_parts[0]
    

内容的提问来源于stack exchange,提问作者Antarr Byrd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:57:02