s3バケットをデータベースのように扱う

今回はs3のバケットをデータベース(以下DB)のように扱う方法について書いて行きます! lambdaなどで少しの情報を抜き出したり、更新したりするときにDBを作成の手間が省けて楽だと思われます!

準備

最初にs3に今回使用したいデータをアップロードします。 今回は水とコップの発注する数をカウントしていく、という以下のようなファイルを使用します。

{
    "water": 0,
    "paper_cups": 0
}

ファイルの拡張子は .db の形にします(jsonのままだとうまく読み込みませんでした)

実践

lambdaでデータを読み込み、更新していくプログラムの例を書いておきます。 lambdaが呼び出されたら、それぞれの項目を+1していく例です。 ※s3にフルアクセスできるロールを付与しておいてください

import boto3
import json

#s3の設定
S3_BUCKET_NAME = バケットの名前
S3_DB_NAME = ファイルの名前.db
S3_client = boto3.client('s3')

#DBから情報取得
response = S3_client.get_object(Bucket=S3_BUCKET_NAME, Key=S3_DB_NAME)
data = json.loads(response["Body"].read())
w_count = data['water']
c_count = data['paper_cups']

#処理
w_count +=1
c_count +=1

#DBの更新
data['water']  =w_count
data['paper_cups'] = c_count
S3_client.put_object(Body=json.dumps(data, indent=4), Bucket=S3_BUCKET_NAME, Key=S3_DB_NAME)

流れとしては

1.DBの情報を取得する。

2.行いたい処理を行う。

3.同じ形のjsonか元のデータに戻して、s3を上書きする。

という流れです。前のデータを保持したい場合などは変数に入れた方が使いやすいです!