进行PutItem时发生ValidationException:缺少项中的键:ClientError

时间:2018-07-09 08:22:13

标签: amazon-web-services aws-lambda amazon-dynamodb amazon-dynamodb-streams

我已在Python 2.7中配置了一个AWS Lambda,以从Firehose Delivery Stream读取事件并写入具有属性'element_class'(字符串类型)作为分区键的DynamoDB表'My_Tab'

import json
import boto3

def lambda_data_handler(event, context):

    dynamodb = boto3.resource('dynamodb', region_name='ap-south-1')
    table = dynamodb.Table('My_Tab')

    response = table.put_item(Item = event)
    print(json.dumps(response))
    print("Row-" + str(index) + " written to DynamoDB successfully")

要流式传输到Firehose,我对JSON文件my_data.json进行二进制编码,然后使用AWS CLI put-record实用程序发送数据,如下所示:

c:\Program Files\Amazon\AWSCLI>aws firehose put-record --delivery-stream-name My_Dlv_Stream --record file://C:/Users/somnath/my_data.json
{
    "RecordId": "DvH2dm5W75F9+bwjJesUW8FoPqQZJOF66etwGoWUycMX..."
}

JSON文件my_data.json具有单个JSON记录,如下所示:

{"Data":"{\"element_class\":\"1001\"}\n"}

但是,以下CloudWatch错误日志未将数据写入DynamoDB表My_Tab:

An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Missing the key element_class in the item: ClientError
Traceback (most recent call last):
File "/var/task/lambda_KFH_2_DynDB.py", line 21, in lambda_data_handler
response = table.put_item(Item = event)
File "/var/task/boto3/resources/factory.py", line 520, in do_action
response = action(self, *args, **kwargs)
File "/var/task/boto3/resources/action.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(**params)
File "/var/task/botocore/client.py", line 314, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/var/task/botocore/client.py", line 612, in _make_api_call
raise error_class(parsed_response, operation_name)
ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Missing the key element_class in the item

1 个答案:

答案 0 :(得分:1)

只需添加以下代码即可从事件的records属性的recordId中提取数据,而不是直接获取事件。而且有效。

1d 4h

@blueCat:感谢您指向打印事件。我期望的数据格式是错误的。