質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

5545閲覧

Lambdaでマップ型のデータをリスト化しDynamoDBへPOSTしたい

YumaYamada

総合スコア30

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2016/09/07 09:22

編集2016/09/09 02:17

###前提・実現したいこと
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)を使用しています。

その他不備がありましたらご教示いただけますと幸いです。
以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

一先ず自己解決しました。

test.js

1"SongList": { 2 L:[{M:{"Test" : {S : event["body-json"].SongList["0"].Test}}} 3 ]}

上記をPutItemすると以下のように出力されました

JSON

1"stuff":[ 2 {"Test" :"Test"} 3 ]

投稿2016/09/11 06:13

YumaYamada

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ソースコードがどこにも載っていません(載っているのはデータ型ですね)
もう少し質問が具体的だと回答が付きやすいかもしれません

Process exited before completing requestに関してgoogle先生で調べますと、いくつか出てきます

https://www.google.co.jp/search?q=Process+exited+before+completing+request&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=nRLSV7vgJIbC9AWI5L7IDg

http://hacknote.jp/archives/11464/

http://hacknote.jp/archives/11416/

私の勝手な想像ですが、現在はわからないことだらけなのではないでしょうか?
目的達成のためには、1歩ずつ進んでいくのが良いかと思います
まずは、Node.jsでHelloWorldから始めるとか
DynamoDBへデータを入れる簡単なプログラムを作るところから開始されてはいかがでしょうか?

質問の回答にはなっていませんが…

投稿2016/09/09 01:51

EKD

総合スコア161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YumaYamada

2016/09/09 02:21

ご回答有り難うございます。ソースコードの追加変更と、それに伴い別のエラーが出てきましたので、差し支えなければご回答いただけますと幸いです。
EKD

2016/09/09 04:05

すみません。私の方でnode.jsを使用して、DynamoDBへデータを挿入したことが無いので、直接の原因が特定できないのですが、 DynamoDBで定義されているデータと、node.jsからputしようとしているデータが一致していないようです 以下とか参考にしてみてください http://qiita.com/inouet/items/b2246d2419daf1788f63 http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.03.html このような複雑なデータよりも、まずは、すごく簡単なテスト用のテーブルなどを用意し、1つカラムに対して、1つのデータを挿入してみるといったstep1から始めた方が良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問