この記事では、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ファイルを操作する基本的な手順です。これらの手順を参考に、自身のアプリケーションに適した形でカスタマイズしてみてください。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です