如何使用无服务器功能,说不存在

时间:2017-02-17 16:26:30

标签: serverless-framework

我正在尝试部署我的第一个无服务项目,并希望让它更新我的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中是否有其他设置我需要设置为调用才能工作?

2 个答案:

答案 0 :(得分:10)

我认为这里有两个问题。

  1. 功能名称为' createMovie'所以你需要说:serverless invoke -f createMovie -l

  2. 检查Cloudwatch日志中是否存在内部服务器错误。我猜它是dynamodb表的名字。你已经制作了电影二,但你有

  3.   

    TableName:'电影'

    希望这有帮助。

答案 1 :(得分:5)

您可以尝试

serverless deploy list functions

查看已部署的功能,以便您可以进一步调试问题。