dynamodb(ログ)↔lambda(読み書き処理) ↔api gateway(APIサーバ) ↔S3静的ホスティング(html+ajax+post)で、サーバレス掲示板を作ってみた。伝統的なLAMPとは、色々と違う感じ!

dynamodb(ログ)↔lambda(読み書き処理) ↔api gateway(APIサーバ) ↔S3静的ホスティング(html+ajax+post)で、サーバレス掲示板を作ってみた。伝統的なLAMPとは、色々と違う感じ!

0, dynamodbで掲示板ログテーブルを作る
まず、awsコンソールからテーブルを作る
テーブル設計は、MySQLと違ってカラムという概念がなく、キーを1個(パーティションーキー) or +2個目(ソートキー)を決めるだけ。
感覚的には、エクセル・CSV・KVSっぽい。DBっていうよりも、JSON形式で色々と放り込めるKVSってのが正しい理解?
(テーブル名=bbs, パーティションーキー=message, ソートキー=post_dateの3項目だけ入力)

Insertは項目の追加ボタンから、カラムを毎回追加する必要がある。(user_idを追加して、値を123とか)
dynamodbはauto_incrementがないので、とりあえず1から手動で追加したりとか、ユニークキーみたいなのは無いみたい。

Select文は、以下の3種類から選ぶ
Scan:全件取得
GetItem:条件に合う0〜1件取得
Query:いわゆるwhere句で、条件に合う0〜n件取得

1, lambdaで、レコード追加&全件取得できるようにする。
Lambdaがdynamodbを操作できるように、ロールとして、AmazonDynamoDBFullAccessポリシーを付与しておく(demo-lambda-roleとか適当に名前つけておいて、lambda関数の作成時に割りあげる)

2, api gatewayでネットからpost出来るようにする
やる事その1、postメソッドで、さっき作ったlambda関数をルーティングする
やる事その2、CORSの有効化で、どこからでもPOST出来るようにする
やる事その3、APIのデプロイで、ネットからアクセス出来るようにする

3, S3静的ホスティングにindex.html(html+ajax+post) をアップロードして、ブラウザから入出力できるようにする。
post先は、APIのデプロイした時に表示される。

初めてサーバレス開発してみたけど、わりと細かいルールというか前提が色々と違って、伝統的なLAMPとは勝手が違う感じ。
そして、lambdaで読み書き処理が遅いな、と思ったら5分使われないとメモリから外されて、再ロードが必要になるのか…。
リアルタイムが必要なわけじゃないけど、遅延が気になるレベルだな。