2017-12-12 7 views
0

AWSラムダ関数をコード化するためにサーバーレスフレームワークを使用しています。 HTMLページからフォームデータを取得し、AWSラムダを使用してDynamodbに保存する必要があります。だから私はnodejsとAPIエンドポイントにもコードを書いています。最後に、AWSにアプリケーションをデプロイしました。したがって、CURLとPostmanの両方を使用してデータを投稿しようとすると、「内部サーバーエラー」が表示されますDynamodb接続のサーバーレスラムダ関数

以下は関連するコードスニペットです。

handler.js

const params = { 
 
    TableName: process.env.DYNAMODB_TABLE, 
 
    Item: { 
 
     id: uuid.v1(), 
 
     name: data.name, 
 
     phone: data.phone, 
 
     checked: false, 
 
     createdAt: timestamp, 
 
     updatedAt: timestamp, 
 
    }, 
 
    };

serverless.yml

provider: 
 
    name: aws 
 
    runtime: nodejs6.10 
 
    environment: 
 
    DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage} 
 
    iamRoleStatements: 
 
    - Effect: Allow 
 
     Action: 
 
     - dynamodb:Query 
 
     - dynamodb:Scan 
 
     - dynamodb:GetItem 
 
     - dynamodb:PutItem 
 
     - dynamodb:UpdateItem 
 
     - dynamodb:DeleteItem 
 
     Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"

私はダイナモテーブルnを定義する場所がわからないんだけどそれは自動的にコードを実行しながら作成されているかどうか?そして、私はこのgithubリポジトリに従いました。https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb

+0

CloudWatchの上に示し、エラーは何ですか? – dashmug

+0

このエラーは、おそらくDynamoDBテーブルを作成していないためです。 – dashmug

答えて

0

現在のserverless.ymlは、DynamoDBテーブルを定義して作成しません。

あなたのserverless設定のresourcesセクションで定義することができます。

provider: 
    name: aws 
    runtime: nodejs6.10 
    environment: 
    DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}-phones 
    iamRoleStatements: 
    - Effect: Allow 
     Action: 
     - dynamodb:Query 
     - dynamodb:Scan 
     - dynamodb:GetItem 
     - dynamodb:PutItem 
     - dynamodb:UpdateItem 
     - dynamodb:DeleteItem 
     Resource: arn:aws:dynamodb:*:*:* 


resources: 
    Resources: 
    phonesTable: 
     Type: AWS::DynamoDB::Table 
     Properties: 
     TableName: ${self:service}-${opt:stage, self:provider.stage}-phones 
     AttributeDefinitions: 
      - AttributeName: id 
      AttributeType: S 
     KeySchema: 
      - AttributeName: id 
      KeyType: HASH 
     ProvisionedThroughput: 
      ReadCapacityUnits: 1 
      WriteCapacityUnits: 1 

参考: https://serverless.com/framework/docs/providers/aws/guide/resources/

+0

したがって、phonesTableを定義しました。これはdynamodbで作成する必要があるテーブルですか?これは特定のフォーマットですか?私はformdata_tableとして作成しました – CodeCanyon

+0

そして、これはリソース:arn:aws:dynamodb:*:*:*を意味しますか? – CodeCanyon

+0

マインは、お客様のアカウントが所有するDynamoDBテーブルを意味します。これは、 "arn:aws:dynamodb:$ {opt:region、self:provider.region} 。あなたはそれがあなたのために働く場合は、あなたが使用するもののようにより具体的にすることができます。ほとんどの場合、そのようなものである必要はありません。 – dashmug

関連する問題