![](/img/trans.png)
[英]How can I write a json file in S3 from a SAM Lambda function with Node
[英]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.