AWSConfigがAWSシステムのスナップショットを12時間ごとに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]
コメントを追加