作者:精典伏击 | 来源:互联网 | 2023-09-12 19:05
我让AWS Config每12小时将我的AWS系统的快照发送到S3存储桶。它们是以json.gz格式存储的JSON文件,其中包含有关整个AWS系统的信息。在存储桶中创建对象时,会触发Lambda函数以读取该文件。我的计划是读取函数中的JSON信息,解析数据并创建描述AWS系统某些元素的报告,并将这些报告推送到另一个S3存储桶。
我当前的代码是:
data = s3.get_object(Bucket=bucket,Key=key)
text = data['Body'].read().decode('utf-8')
json_data = json.loads(text)
我当前遇到的错误是:'utf-8'编解码器无法解码位置1的字节0x8b:无效的起始字节
我的猜测是这个错误是说data ['Body']中的某些字节不是ASCII字符。显然,我无法使用标准utf-8进行解码,因此我想将.gz文件解压缩。有没有办法做到这一点?我已经研究过zipfile.py,但是我无法真正收集有关用例的任何信息。谢谢。
您是正确的-您无法将其解码为文本。您会想要类似的东西:
import io
import gzip
import json
import boto3
from urllib.parse import unquote_plus
def handler_name(event,context):
s3client = boto3.client('s3')
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = unquote_plus(record['s3']['object']['key'])
respOnse= s3client.get_object(Bucket=bucket,Key=key)
cOntent= response['Body'].read()
with gzip.GzipFile(fileobj=io.BytesIO(content),mode='rb') as fh:
yourJson = json.load(fh)
然后可以使用yourJson
变量来读取JSON。