具有 dynamodb 连接问题的无服务器 lambda 函数

serverless lambda function with dynamodb connect issue

我正在使用无服务器框架来编写 AWS lambda 函数。我需要从 HTML 页面获取表单数据并使用 AWS lambda 将其保存到 Dynamodb。所以我也在 nodejs 和 API 端点中编写了代码。最后我将应用程序部署到 AWS。因此,当我尝试使用 CURL 和 Postman 获取 post 数据时,它显示 "Internal Server Error"

以下是相关代码片段。

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}"

我不确定在哪里定义 Dynamo table 名称以及它是否由 运行 代码自动创建?我遵循了这个 github 回购 - https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb

您当前的 serverless.yml 没有为您定义和创建 DynamoDB table。

您可以在 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/