AWS CDK Python Workshop:DynamoDB写入ParamValidationError问题求助
问题解决:DynamoDB update_item 参数验证失败
错误原因分析
从CloudWatch日志的错误信息可以明确两个核心问题:
- 参数大小写不匹配:调用
table.update_item()时使用了小写的key参数,但boto3严格遵循DynamoDB API规范,要求必须传入大写的Key参数。 - UpdateExpression语法错误:
"ADD hits: incr"的写法不符合DynamoDB表达式规则,属性名与占位符之间必须用空格分隔,正确格式应为"ADD hits :incr"。
修正后的hitcount.py代码
import json import os import boto3 ddb = boto3.resource("dynamodb") table = ddb.Table(os.environ["HITS_TABLE_NAME"]) _lambda = boto3.client("lambda") def handler(event, context): print("request : {}".format(json.dumps(event))) table.update_item( Key = {"path": event["path"]}, # 修正为大写Key参数 UpdateExpression = "ADD hits :incr", # 修正表达式占位符的空格格式 ExpressionAttributeValues = {":incr": 1} ) resp = _lambda.invoke( FunctionName= os.environ["DOWNSTREAM_FUNCTION_NAME"], Payload = json.dumps(event), ) body = resp["Payload"].read() print("Downstream Response: {}".format(body)) return json.loads(body)
其他代码验证
你的hitcounter.py和cdk_workshop_stack.py代码逻辑、权限配置(table.grant_read_write_data和downstream.grant_invoke)均无问题,无需修改。
修正后重新部署CDK应用,即可正常向DynamoDB表创建条目。
内容的提问来源于stack exchange,提问作者Kiran
相关产品推荐
相关产品推荐

