この記事では、AWSのLambdaとS3を用いてPythonでJSONファイルを操作する方法について説明します。具体的には、S3に保存されたJSONファイルをLambda関数で読み込み、その内容を処理する方法を示します。
S3へのJSONファイルの保存
まず、S3のバケットを準備します。バケット名は任意に設定できます。
次に、Lambda関数を作成します。この関数は、リクエストを送る際に発行されるrequest_idをそのままファイル名にしてJSONファイルを保存します。
import json
import boto3
s3 = boto3.resource('s3')
# バケット名を指定
BUCKET_NAME = "sample-json-test"
def lambda_handler(event, context):
# request_idを取得
request_id = context.aws_request_id
# バケット名,オブジェクト名を指定
bucket = s3.Bucket(BUCKET_NAME)
object_key_name = f"{request_id}.json"
# オブジェクトを生成
obj = bucket.Object(object_key_name)
# 対象のバケットにjsonデータをアップロード
json_data = event
r = obj.put(Body = json.dumps(json_data))
return {
'request_id': request_id,
'statusCode': 200,
}
S3からのJSONファイルの取得
次に、S3からJSONファイルを取得するLambda関数を作成します。この関数は、GETリクエストのボディに含まれるrequest_idをもとに、S3から対象のJSONファイルを取得し辞書型に変換した値を返します。
import json
import boto3
s3 = boto3.resource('s3')
# バケット名を指定
BUCKET_NAME = 'sample-json-test'
def lambda_handler(event, context):
# request_idを取得
request_id = event["request_id"]
# バケット名,オブジェクト名を指定
bucket = s3.Bucket(BUCKET_NAME)
object_key_name = '{}.json'.format(request_id)
# オブジェクトを生成
obj = bucket.Object(object_key_name)
try:
# 対象のjsonを取得し中身を取り出す
response = obj.get()
body = response['Body'].read()
# json -> 辞書型へ変換
data = json.loads(body.decode('utf-8'))
return data
except Exception as e:
return str(e)
以上が、AWS LambdaとS3を用いてPythonでJSONファイルを操作する基本的な手順です。これらの手順を参考に、自身のアプリケーションに適した形でカスタマイズしてみてください。