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

Tod*_*son 4 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
Run Code Online (Sandbox Code Playgroud)

然后我在网上找到了更多的代码链接我的应用程序的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
Run Code Online (Sandbox Code Playgroud)

我在handler.js中的函数是:

module.exports.createMovie = (event, context, cb) => {  
  const params = {
    TableName: 'movies',
    Item: {
        "movieTitle": "Star Wars"
    }
  };

  return dynamo.put(params, cb);
};
Run Code Online (Sandbox Code Playgroud)

我运行无服务器部署,它在许多层面上运行.为我创建了我的lambda,给了我一个端点和函数:

端点: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并且它说:

无服务器错误---------------------------------------

 Function "serverless-dev-createMovie" doesn't exist
 in this Service
Run Code Online (Sandbox Code Playgroud)

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

use*_*525 10

我认为这里有两个问题.

  1. 函数名称为'createMovie',因此您需要说: serverless invoke -f createMovie -l

  2. 检查Cloudwatch日志以查找内部服务器错误.我猜它是dynamodb表名.你创造了'moviesTwo',但你有

TableName:'电影'

希望这可以帮助.


Dro*_*sis 8

你可以试试

serverless deploy list functions
Run Code Online (Sandbox Code Playgroud)

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