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

How to use Serverless functions, says doesn't exist

我正在尝试部署我的第一个无服务器项目,并想让它更新我的 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

然后我在网上找到了更多代码来 link 我的应用程序的 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,给了我一个端点和函数:

endpoints: POST - https://tbwg38fvc0.execute-api.us-east-1.amazonaws.com/dev/movies/create functions: serverless-dev-hello serverless-dev-createMovie

但是我 运行 在 postman 中遇到了内部服务器错误,我尝试调用: 无服务器调用-f serverless-dev-createMovie -l 它说:

Serverless Error ---------------------------------------

 Function "serverless-dev-createMovie" doesn't exist
 in this Service

所以我很困惑我做错了什么。 AWS 中是否还有其他我缺少的设置需要设置才能调用才能工作?

我认为这里有两个问题。

  1. 函数名是'createMovie'所以你需要说:serverless invoke -f createMovie -l

  2. 检查 Cloudwatch 日志以了解内部服务器错误。我猜这是 dynamodb table 名称。您已创建 'moviesTwo',但您有

TableName: 'movies'

希望对您有所帮助。

你可以试试

serverless deploy list functions

查看部署的函数,以便进一步调试问题。