AWSのLambdaで、DynamoDBにデータを突っ込む。 LambdaではPython等も使えるが、昔からあるnodeを素直に使った。 入り口は、インタネットからAPI Gatewayで。
exports.handler
に実行したい関数を設定する。
DynamoDBはスキーマレスで、カラム定義なしに色々データを突っ込める。
が、レコードのカラムには、S
という不思議なものを渡す。
API Gatewayでは、宛先となるリソースやメソッドを定義する。 パラメータは、node側で取り出すのではなく、 Integration RequestでBody Mapping Template というものを定義して取り出す。
{
"id": $input.json('$.user'),
"data": $input.json('$.dataBody')
}
のような感じ。
ここでパラメータが合わない場合、
Lambda関数が呼む前にコケて、デバックに苦労する。
また、jQueryでオブジェクトをPOSTするとき、
$.post()
ではダメだった。
$.ajax()
でパラメータを直接指定しないといけないらしい。
node側ではcontext.fail()
するケースもあるが、
その場合でも、ステータスコードはデフォルトだと200 OK
になる。
400系にしたければ、明示的にAPI Gatewayの
Method Responseに400系を追加する。
それからその400系コードを返すときの条件を
Lambda Error Regexに指定する。
今回は作成で、201 Created
が望ましいので、
201になるようにレスポンスの設定をしないといけない。
手間と落とし穴は結構多い。 サーバレスだと安価だし、 技術的にもおもしろい感じではあるが…