У меня есть лямбда-функция Python 3.6 AWS, которую я создаю для запроса Cost Explorer и некоторых других сервисов.Я хочу записать строковый ответ, который я возвращаю, в объект JSON, который я могу загрузить на S3 или в DynamoDB.
Рабочий пример функции ниже
import boto3
def handler(event,context):
client = boto3.client('ce')
response = client.get_cost_forecast(
TimePeriod={
'Start': '2019-06-01', ## Start must be one day after creation date of function
'End': '2020-07-01'
},
Metric='UNBLENDED_COST',
Granularity='MONTHLY',
PredictionIntervalLevel=90 ## 51 - 99 Range
)
return str (response)
Возвращаетпросто отлично в консоли, теперь я попытался это поместить Response в тело объекта, который я хотел записать в S3
import boto3
def handler(event,context):
client = boto3.client('ce')
s3 = boto3.resource('s3')
object = s3.Object('my-bucket', 'my/path/object.json')
response = client.get_cost_forecast(
---ce python stuff---
object.put(Body=response)
return str (response)
Это не работает, как ожидалось, и я получаю эту ошибку из 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
Я думал, что могу просто вставить это в объект и выписать его.Есть ли лучший способ сделать то, что я пытаюсь сделать?