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

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

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

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

Q&A

解決済

1回答

1337閲覧

DynamoDBでTableのデータを取得したい

souta-haruran

総合スコア88

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

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

0グッド

1クリップ

投稿2019/06/01 08:52

###目的
こちらに書かれているgetItemメソッドを呼び出し、定義しているデータを取得したい。
という目的です。

###現状
目的達成のため以下に記す環境やサンプルコードを用意した上で、上記に記したサイト内に書かれているサンプルを引用し、コマンドラインを実行するも期待する値が得られません。

###環境情報
環境としては以下のような環境になっています。

  • AWS SAMでローカルにAPI GatewayとLambda Functionを用意しています。
  • dockerでDynamoDBを起動しています。

###概要
現在、上記に示した環境と共に、以下に記すサンプルのコードを用意しています。

###サンプルコード
※取得したいjsonデータ
★1 [jsonファイル]

json

1{ 2 "Threads": [ 3 { 4 "PutRequest": { 5 "Item": { 6 "ThreadTs": { 7 "S": "100000" 8 }, 9 "UserId": { 10 "S": "000001" 11 }, 12 "ParentText": { 13 "S": "text 1" 14 }, 15 "Closed": { 16 "BOOL": false 17 } 18 } 19 } 20 } 21 ] 22}

[template.yaml]

yaml

1AWSTemplateFormatVersion: '2010-09-09' 2Transform: AWS::Serverless-2016-10-31 3Description: > 4 demo 5 6 Sample SAM Template for demo 7 8# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst 9Globals: 10 Function: 11 Timeout: 3 12 13Resources: 14 HelloWorldFunction: 15 Type: AWS::Serverless::Function 16 Properties: 17 CodeUri: hello-world/ 18 Handler: app.handler 19 Runtime: nodejs8.10 20 Events: 21 HelloWorld: 22 Type: Api 23 Properties: 24 Path: /hello 25 Method: get 26 Environment: 27 Variables: 28 PARAM1: "http://localhost:8000" 29 30Outputs: 31 HelloWorldApi: 32 Description: "API Gateway endpoint URL for Prod stage for Hello World function" 33 Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" 34 HelloWorldFunction: 35 Description: "Hello World Lambda Function ARN" 36 Value: !GetAtt HelloWorldFunction.Arn 37 HelloWorldFunctionIamRole: 38 Description: "Implicit IAM Role created for Hello World function" 39 Value: !GetAtt HelloWorldFunctionRole.Arn

[app.js]

javascript

1// Load the AWS SDK for Node.js 2var AWS = require('aws-sdk'); 3 4// Set the region 5AWS.config.update({region: 'ap-northeast-1'}); 6 7// Create the DynamoDB service object 8var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'}); 9 10 11var params = { 12 TableName: 'Threads', 13 Key: { 14 'ThreadTs': { 15 S: '100000' 16 } 17 } 18}; 19 20// Call DynamoDB to read the item from the table 21ddb.getItem(params, function(err, data) { 22 if (err) { 23 console.log("Error", err); 24 } else { 25 console.log("Success", data.Item); 26 } 27});

コマンドラインで以下を実行したところ、

sh db/setup.sh

以下の値が返ってきました。

json

1{ 2 "TableDescription": { 3 "TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/Threads", 4 "AttributeDefinitions": [ 5 { 6 "AttributeName": "ThreadTs", 7 "AttributeType": "S" 8 } 9 ], 10 "ProvisionedThroughput": { 11 "NumberOfDecreasesToday": 0, 12 "WriteCapacityUnits": 2, 13 "LastIncreaseDateTime": 0.0, 14 "ReadCapacityUnits": 2, 15 "LastDecreaseDateTime": 0.0 16 }, 17 "TableSizeBytes": 0, 18 "TableName": "Threads", 19 "BillingModeSummary": { 20 "LastUpdateToPayPerRequestDateTime": 0.0, 21 "BillingMode": "PROVISIONED" 22 }, 23 "TableStatus": "ACTIVE", 24 "KeySchema": [ 25 { 26 "KeyType": "HASH", 27 "AttributeName": "ThreadTs" 28 } 29 ], 30 "ItemCount": 0, 31 "CreationDateTime": 1559375047.868 32 } 33} 34{ 35 "UnprocessedItems": {} 36}

上記を踏まえた上で現状を記します。

###現在の状態
コマンドラインで

curl http://localhost:8000/Threads/1

を実行すると以下が返ってきます。

{"__type":"com.amazonaws.dynamodb.v20120810#MissingAuthenticationToken","message":"Request must contain either a valid (registered) AWS access key ID or X.509 cert

さらに、

curl http://localhost:3000/Threads/1

を実行すると以下が返ってきます。

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1.0"> 6 <title>xxxxx</title> 7 </head> 8 <body> 9 <div id="app"></div> 10 <!-- built files will be auto injected --> 11 <script type="text/javascript" src="/app.js"></script> 12 </body> 13</html>

getItemを呼び出した時の返り値として期待する値は「★1」のjsonデータなのですが、実際はそうではなく、上記のような状態です。

そもそも大きな間違いをしているのか、同時にgetItemを呼び出すための実行コマンドが違うのか、調査を重ねるも解決に至りません。

大変恐縮なのですが、どのようにすれば「★1」のjsonデータを取得することができるのかご教示いただけますと幸いです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

経験のある人物の協力を得てやれることになりました。

投稿2019/06/18 11:06

souta-haruran

総合スコア88

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問