我正在尝试部署我的第一个无服务项目,并希望让它更新我的dynamodb中的一个简单项目。所以我开始在serverless.yml中创建一个简单的服务:
service: serverless
provider:
name: aws
runtime: nodejs4.3
iamRoleStatements:
- Effect: "Allow"
Resource: "*"
Action:
- "dynamodb:*"
functions:
createMovie:
handler: handler.createMovie
events:
- http:
path: movies/create
method: post
integration: lambda
cors: true
然后我在网上找到了更多的代码链接我的应用程序的dynamodb部分,并将其添加到底部的serverless.yml: 资源:
Resources:
DynamoDbTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: moviesTwo
AttributeDefinitions:
- AttributeName: movieTitle
AttributeType: S
KeySchema:
- AttributeName: movieTitle
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
DynamoDBIamPolicy:
Type: AWS::IAM::Policy
DependsOn: DynamoDbTable
Properties:
PolicyName: lambda-dynamodb
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- dynamodb:GetItem
- dynamodb:PutItem
Resource: arn:aws:dynamodb:*:*:table/moviesTwo
Roles:
- Ref: IamRoleLambdaExecution
我在handler.js中的函数是:
module.exports.createMovie = (event, context, cb) => {
const params = {
TableName: 'movies',
Item: {
"movieTitle": "Star Wars"
}
};
return dynamo.put(params, cb);
};
我运行无服务器部署,它在多个级别上运行。为我创建了我的lambda,给了我一个端点和函数:
端点:POST - https://tbwg38fvc0.execute-api.us-east-1.amazonaws.com/dev/movies/create 函数:serverless-dev-hello serverless-dev-createMovie
但我在postman中运行它并且我收到内部服务器错误,我试着调用: 无服务器调用-f serverless-dev-createMovie -l 它说:
无服务器错误---------------------------------------
Function "serverless-dev-createMovie" doesn't exist in this Service
所以我很困惑我做错了什么。 AWS中是否有其他设置我需要设置为调用才能工作?
答案 0 :(得分:10)
我认为这里有两个问题。
功能名称为' createMovie'所以你需要说:serverless invoke -f createMovie -l
检查Cloudwatch日志中是否存在内部服务器错误。我猜它是dynamodb表的名字。你已经制作了电影二,但你有
TableName:'电影'
希望这有帮助。
答案 1 :(得分:5)
您可以尝试
serverless deploy list functions
查看已部署的功能,以便您可以进一步调试问题。