今回は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を上書きする。
という流れです。前のデータを保持したい場合などは変数に入れた方が使いやすいです!