Python AWS Lambda-S3 put_对象参数体的类型无效
我在路由53中有一个托管区域,并且希望将hostzone对象的内容存储在S3中,但我得到一个错误。我认为Body是正确的参数,但这可能是因为对象是JSON格式的Python AWS Lambda-S3 put_对象参数体的类型无效,python,amazon-web-services,amazon-s3,aws-lambda,boto3,Python,Amazon Web Services,Amazon S3,Aws Lambda,Boto3,我在路由53中有一个托管区域,并且希望将hostzone对象的内容存储在S3中,但我得到一个错误。我认为Body是正确的参数,但这可能是因为对象是JSON格式的 import boto3 import json def allwork(): client = boto3.client('route53') hostzone = client.list_hosted_zones() bucket_name = "testlambda" file_name = "r
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.........
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()
你确定这是JSON格式的而不是对象吗?不是100%,查看这里的文档:看起来它返回了一个dict,所以你需要在将其传递给put_对象之前手动对其进行JSON编码。谢谢它工作了,更新以包含你的建议!请不要将答案编辑到问题中。未来的访问者看到这个问题时会假设您正在展示的代码会生成错误,当然不会,因为它已经被修复了。在问题中留下不正确的代码,并在答案中填入答案。