【備忘録】フォーマットしたjsonをS3にアップロードする
Lambdaで取得したjsonデータを見やすくフォーマットして全体を確認したいことがあって、そのとき書いたプログラムのメモ。
Lambdaの実行結果を表示するコンソールだと、長文のjsonを出力しようとすると、うまく表示されません。
たとえば以下のプログラムの場合だと、EC2インスタンスの情報を取得したものをフォーマットしたjsonデータを返すのですが、
import boto3
import json
import sys
from datetime import date, datetime
def lambda_handler(event, context):
def json_serial(obj):
if isinstance(obj, (datetime, date)):
return obj.isoformat()
raise TypeError ("Type %s not serializable" % type(obj))
client = boto3.client('ec2')
response = client.describe_instances(DryRun=False)
body = json.loads(json.dumps(response, default=json_serial))
formatted = json.dumps(body, indent=4, sort_keys=True, separators=(',', ': '))
return {"result":formatted}
Lambdaの実行結果表示窓にはこんな感じで表示されちゃいます。
なので、こんな感じでjsonをフォーマットしたものをs3にアップロードして、エディタなどでから確認できるようにしました。
#bodyをフォーマットしたものをs3にアップロードする
formatted = json.dumps(body, indent=4, sort_keys=True, separators=(',', ': '))
s3client = boto3.client('s3')
s3client.put_object(
Bucket="BUCKET_NAME",
Key = 'FILENAME.json',
Body = formatted
)
アップロードされたファイルを確認すると、こんな感じに。
もっと効率のいい方法がありそうな気がします。