具有 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/
我正在使用无服务器框架来编写 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/