我正在使用无服务器框架来代码AWS lambda函数。我需要从HTML页面获取表单数据,并使用AWS lambda将其保存到DynamoDB。因此,我也用NodeJS和API端点编写了代码。最后,我将应用程序部署到AWS。因此,当我尝试同时使用Curl和Postman发布数据时,它显示了"内部服务器错误"
以下是相关的代码片段。
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表名以及它是由自动运行代码时创建的?我遵循了此GitHub repo -https://github.com/serverless/examples/tree/master/master/aws-node-node-node-rest-api-with-dynamodb
您的当前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/