繁体   English   中英

如何使用 AWS Lambda 函数从 S3 解码 a.gz 文件?

[英]How can I decode a .gz file from S3 using an AWS Lambda function?

我让 AWS Config 每 12 小时将我的 AWS 系统的快照发送到 S3 存储桶。 它们是以 a.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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM