AWS Lambda - S3 put_object Неверный тип для параметра Body - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть размещенная зона на маршруте 53, и я хотел бы, чтобы содержимое объекта hostzone сохранялось в S3, но я получаю ошибку. Я думаю, что тело является правильным параметром, но, возможно, это потому, что объект находится в формате JSON?

import boto3
import json

def allwork():
    client = boto3.client('route53')
    hostzone = client.list_hosted_zones()
    bucket_name = "testlambda"
    file_name = "r53data.txt"
    lambda_path = "/tmp/" + file_name
    s3_path = "10102018/" + file_name 

    s3 = boto3.resource("s3")
    s3.Bucket(bucket_name).put_object(Key=s3_path, Body=hostzone)

allwork()

Вот ошибка:

module initialization error: Parameter validation failed:
Invalid type for parameter Body, value: {u'HostedZones': 
[{u'ResourceRecordSetCount': 7, u'CallerReference': '814E3.........

1 Ответ

0 голосов
/ 11 ноября 2018

tkausl ответил на вопрос в комментариях:

Looks like it returns a dict, so you need to json encode it manually before passing it to put_object 

Обновление:

import boto3
import json

def allwork():
client = boto3.client('route53')
hostzone = client.list_hosted_zones()
bucket_name = "testlambda"
file_name = "r53data.txt"
lambda_path = "/tmp/" + file_name
s3_path = "10102018/" + file_name 

hostzone2=json.dumps(hostzone, ensure_ascii=False)

s3 = boto3.resource("s3")
s3.Bucket(bucket_name).put_object(Key=s3_path, Body=hostzone2)

allwork()
...