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の実行結果表示窓にはこんな感じで表示されちゃいます。

result.PNG

なので、こんな感じで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
    )

アップロードされたファイルを確認すると、こんな感じに。

result2.png

もっと効率のいい方法がありそうな気がします。