Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 执行PutItem时发生ValidationException:项中缺少键:ClientError_Amazon Web Services_Aws Lambda_Amazon Dynamodb_Amazon Dynamodb Streams - Fatal编程技术网

Amazon web services 执行PutItem时发生ValidationException:项中缺少键:ClientError

Amazon web services 执行PutItem时发生ValidationException:项中缺少键:ClientError,amazon-web-services,aws-lambda,amazon-dynamodb,amazon-dynamodb-streams,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Amazon Dynamodb Streams,我在Python2.7中配置了一个AWS Lambda,从Firehose交付流读取事件,并将属性“element_class”(type String)作为分区键写入DynamoDB表“My_Tab” import json import boto3 def lambda_data_handler(event, context): dynamodb = boto3.resource('dynamodb', region_name='ap-south-1') table =

我在Python2.7中配置了一个AWS Lambda,从Firehose交付流读取事件,并将属性“element_class”(type String)作为分区键写入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")
为了流式传输到消防软管,我对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..."
}
{"Data":"{\"element_class\":\"1001\"}\n"}
JSON文件my_data.JSON有一个JSON记录,如下所示:

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..."
}
{"Data":"{\"element_class\":\"1001\"}\n"}
但是数据没有写入DynamoDB表My_选项卡,并带有以下CloudWatch错误日志:

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

只是添加了下面的代码来从事件的recordId of records属性中提取数据,而不是直接获取事件。它成功了

    it = json.loads(event['records'][0]['data'])
    response = table.put_item(Item = it)

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

在函数开头添加一个
print(json.dumps(event))
。您的事件是否有一个顶级键
元素类
?是的,我的事件有一个名为“元素类”的顶级键。它将有一个字符串值。您可以从日志中添加
print(json.dumps(event))
的输出吗?