AWS Lambda调用DynamoDB Update_Item时的语法及参数验证错误排查
问题解决步骤
1. 修复语法错误
你的代码中Key参数的字典未闭合,缺失了一个},导致后续代码语法解析失败。
原错误代码片段:
Key={'id': {'S': body["id"]},
修正后:
Key={'id': {'S': body["id"]}},
这个缺失的闭合括号是触发第一个Runtime.UserCodeSyntaxError的直接原因。
2. 修复参数类型错误
使用AWS SDK的低级客户端(boto3.client('dynamodb'))时,所有属性值必须显式指定DynamoDB数据类型,不能直接传入原始Python类型。你的ExpressionAttributeValues中:g的值是字符串"yes",不符合要求,需改为类型字典格式:
ExpressionAttributeValues={ ':g': {'S': "yes"} },
这里{'S': "yes"}表示该值为DynamoDB字符串类型(S是字符串类型标识)。若使用高级资源客户端(boto3.resource('dynamodb'))则可直接传入原始类型,但当前使用的低级客户端必须遵循此规则。
修正后的完整代码
update = client.update_item( TableName='sample', Key={'id': {'S': body["id"]}}, UpdateExpression="set cancelled = :g", ConditionExpression='attribute_exists(id)', ExpressionAttributeValues={ ':g': {'S': "yes"} }, ReturnValues="UPDATED_NEW" )
额外注意
- 你提到
put_item可正常运行,说明IAM权限与服务连接无问题,仅需修正代码语法和参数格式。 - 检查
UpdateExpression中的字段名cancelled与DynamoDB表实际字段名是否一致,避免后续出现属性不存在的错误。
内容的提问来源于stack exchange,提问作者A. Paul
相关产品推荐
相关产品推荐

