###前提・実現したいこと
AWS Lambda(Node.js)+DynamoDBでアプリのバックエンドを開発しています。
現在プレイリストを作成できるアプリを制作しており、その楽曲のデータ(曲名、ジャケット写真、分数、ジャンル、種類)をマップ型で格納し、その楽曲データをリスト型で並べ、DynamoDBへ保存したいです。
###発生している問題・エラーメッセージ
CloudWatchを見ると以下のように表示されます。
[UnexpectedParameter: Unexpected key '0' found in params.Item['SongList'].L[0]] message: 'Unexpected key \'0\' found in params.Item[\'SongList\'].L[0]', code: 'UnexpectedParameter', time: Fri Sep 09 2016 02:04:27 GMT+0000 (UTC) } 'UnexpectedParameter: Unexpected key \'0\' found in params.Item[\'SongList\'].L[0]\n at ParamValidator.fail (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:50:37)\n at ParamValidator.validateStructure (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:77:14)\n at ParamValidator.validateMember (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:88:21)\n at ParamValidator.validateList (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:103:14)\n at ParamValidator.validateMember (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:90:21)\n at ParamValidator.validateStructure (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:75:14)\n at ParamValidator.validateMember (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:88:21)\n at ParamValidator.validateMap (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:117:14)\n at ParamValidator.validateMember (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:92:21)\n at ParamValidator.validateStructure (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:75:14)
body-jsonにはクライアント側でPOSTしたデータが渡っていたのが確認できたため、Lambdaでの記入方法が間違っていると考えています。タイムアウト等もありません。
###該当のソースコード
Lambdaには以下の形で記入しました
"use strict"; let AWS = require('aws-sdk'); AWS.config.apiVersions = { dynamodb: '2012-08-10' }; let dynamo = new AWS.DynamoDB(); exports.handler = function(event, context) { console.log('Received event:', JSON.stringify(event, null, 2)); var param ={ TableName: "Playlist", Item:{ "PlaylistName": {S : event["body-json"]["PlaylistName"] }, "DJName": {S : event["body-json"]["DJName"] }, "ArtWork": {S : event["body-json"]["ArtWork"] }, "CategoryId": {S: event["body-json"]["CategoryId"]}, "DateCreated" : {S : event["body-json"]["DateCreated"]}, "Description" : {S : event["body-json"]["Description"]}, "Like" : {N : event["body-json"]["Like"]}, "SongList" : { L:[ [{ M: { "Avatar":{ S : event["body-json"]["Avatar"]} } }], ] }, }, }; dynamo.putItem(param, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response }); };
POSTの際は以下のようにデータを渡しました。
JSON
1 2 { 3 "DateCreated": "2016-08-17T12:00+09:00", 4 "DJName": "MyTestDJ3", 5 "PlaylistName": "Happy4", 6 "ArtWork": "test.png", 7 "CategoryId": "Happy", 8 "Description": "testDesc", 9 "Like": "0", 10 "SongList" : [ 11 {"Avatar" : "TestAvatar"} 12 ] 13}
###補足情報(言語/FW/ツール等のバージョンなど)
クライアント側でのPOSTはpostmanを使用しています。
AWSはLambda(Node.js4.3),DynamoDB,API GW(POST)を使用しています。
その他不備がありましたらご教示いただけますと幸いです。
以上、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。