AWS Config가 12 시간마다 AWS 시스템의 스냅 샷을 S3 버킷으로 전송합니다. 전체 AWS 시스템에 대한 정보를 포함하는 .json.gz 형식으로 저장된 JSON 파일입니다. 버킷에서 객체 생성시 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을 읽을 수 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다