【发布时间】:2017-07-07 06:24:38
【问题描述】:
我正在尝试部署我的第一个无服务项目,并希望让它更新我的 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
但我在邮递员中运行它并收到内部服务器错误,我尝试调用: 无服务器调用 -f serverless-dev-createMovie -l 它说:
无服务器错误 ----------------------------------------
Function "serverless-dev-createMovie" doesn't exist in this Service
所以我很困惑我做错了什么。 AWS 中是否还有其他设置需要设置才能让调用起作用?
【问题讨论】: