【问题标题】:How to use Serverless functions, says doesn't exist如何使用无服务器功能,说不存在
【发布时间】: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 中是否还有其他设置需要设置才能让调用起作用?

【问题讨论】:

    标签: serverless-framework


    【解决方案1】:

    你可以试试

    serverless deploy list functions
    

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

    【讨论】:

      【解决方案2】:

      我认为这里有两个问题。

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

      2. 检查 Cloudwatch 日志以了解内部服务器错误。我猜这是 dynamodb 表名。你已经创建了“moviesTwo”,但是你有

      表名:'电影'

      希望这会有所帮助。

      【讨论】:

      • 第一是我的第一个问题。当我完成部署时,它告诉我我的功能是 serverless-dev-createMovie,所以这就是我使用的。谢谢。我正在删除更多错误,但这让我走上了正轨。
      • 另一个问题,我现在正在运行端点并得到“不支持的媒体类型”。这可能指的是什么?
      • 没关系,我观看了一个 youtube 视频并让我的端点与邮递员一起工作。也更新了我的 dynamodb!谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2019-11-23
      • 1970-01-01
      • 2018-11-25
      • 2018-02-05
      相关资源
      最近更新 更多