DynamoDB DocumentClientで 'The provided key element does not match the schema' エラーが出る
Node.jsでDocumentClientを使ってテーブルから指定したPK・SKの組み合わせのレコードを削除するスクリプトを書いた。
しかし The provided key element does not match the schema
例外が上がってうまく動かない。
const AWS = require('aws-sdk'); const documentClient = new AWS.DynamoDB.DocumentClient(); const deleteUser = async (email, user_id) => { console.log('deleting user'); var params = { TableName: 'UserData', Key: { email: email, user_id: user_id } }; await documentClient.delete(params).promise(); }; deleteUser('someone@example.com', 100);
なぜか。
色々試したが、原因はスキーマが合っていなかったからだった。
ソートキーの user_id
はString型だった...
なので、以下のように修正した。
+ user_id: (String)user_id - user_id: user_id
テーブルのスキームに合わせてキャストしてあげないとAWS SDKが文字列型にいい感じに変換してくれてしまうので、 予期しない動きをするのである。
動的型付けのNode.jsやPHPに慣れていると、見落としがちだ。