Python 在JSON对象中写出Boto3响应,并在AWS Lambda函数中上传到S3

Python 在JSON对象中写出Boto3响应,并在AWS Lambda函数中上传到S3,python,json,amazon-s3,aws-lambda,boto3,Python,Json,Amazon S3,Aws Lambda,Boto3,我有一个Python3.6AWS Lambda函数,用于查询Cost Explorer和一些其他服务。我想将返回的字符串响应写入一个JSON对象,我可以上传到S3或DynamoDB 下面是该函数的一个工作示例 导入boto3 def处理程序(事件、上下文): client=bot3.client('ce') 响应=客户。获取成本预测( 时间段={ ‘开始’:‘2019-06-01’,##开始日期必须在函数创建日期后一天 “结束”:“2020-07-01” }, 公制=‘未借贷成本’, "每月",

我有一个Python3.6AWS Lambda函数,用于查询Cost Explorer和一些其他服务。我想将返回的字符串响应写入一个JSON对象,我可以上传到S3或DynamoDB

下面是该函数的一个工作示例

导入boto3
def处理程序(事件、上下文):
client=bot3.client('ce')
响应=客户。获取成本预测(
时间段={
‘开始’:‘2019-06-01’,##开始日期必须在函数创建日期后一天
“结束”:“2020-07-01”
},
公制=‘未借贷成本’,
"每月",,
PredictionIntervalLevel=90##51-99范围
)
返回str(响应)
在控制台中返回的结果很好,现在我尝试将响应放入我想要写入S3的对象的主体中

导入boto3
def处理程序(事件、上下文):
client=bot3.client('ce')
s3=boto3.resource('s3')
object=s3.object('my-bucket','my/path/object.json')
响应=客户。获取成本预测(
---巨蟒的东西---
object.put(Body=response)
返回str(响应)
这不是预期的工作,我从CloudWatch得到这个错误

Parameter validation failed:
Invalid type for parameter Body, value: {'Total': {'Amount': '...RESPONSE...'}, 'RetryAttempts': 0}}, type: <class 'dict'>, valid types: <class 'bytes'>, <class 'bytearray'>, file-like object: ParamValidationError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 17, in handler
object.put(Body=response)
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 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/var/task/botocore/client.py", line 634, in _make_api_call
api_params, operation_model, context=request_context)
File "/var/task/botocore/client.py", line 682, in _convert_to_request_dict
api_params, operation_model)
File "/var/task/botocore/validate.py", line 297, in serialize_to_request
raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter Body, value: {'Total': {'Amount': '...RESPONSE...'}, 'RetryAttempts': 0}}, type: <class 'dict'>, valid types: <class 'bytes'>, <class 'bytearray'>, file-like object
参数验证失败:
参数体的类型无效,值:{'Total':{'Amount':'…RESPONSE…'},'RetryAttempts':0},类型:,有效类型:,类文件对象:ParamValidationError
回溯(最近一次呼叫最后一次):
文件“/var/task/lambda_function.py”,第17行,在处理程序中
object.put(Body=response)
文件“/var/task/boto3/resources/factory.py”,第520行,在do_action中
响应=动作(自身、*args、**kwargs)
文件“/var/task/boto3/resources/action.py”,调用中第83行__
response=getattr(parent.meta.client,operation_name)(**参数)
文件“/var/task/botocore/client.py”,第357行,在api调用中
返回self.\u make\u api\u调用(操作名称,kwargs)
文件“/var/task/botocore/client.py”,第634行,在make\u api\u调用中
api参数,操作模型,上下文=请求(上下文)
文件“/var/task/botocore/client.py”,第682行,在“转换为请求”目录中
api(参数、操作(模型)
文件“/var/task/botocore/validate.py”,第297行,在序列化请求中
raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError:参数验证失败:
参数体的类型无效,值:{'Total':{'Amount':'…RESPONSE…'},'RetryAttempts':0},类型:,有效类型:,类文件对象
我想我可以把它塞进物体里,然后写出来。有没有更好的方法来做我想做的事?

正文(字节或类似对象的可查找文件)--对象数据

因此,请尝试类似于
Body=json.dumps(response.encode()

您的
响应
是一个
dict
对象

正文(字节或类似对象的可查找文件)--对象数据

因此,请尝试类似于
Body=json.dumps(response.encode()


您的
响应
是一个
dict
对象

它实际上工作得很好,感谢您的快速响应它实际上工作得很好,感谢您的快速响应