2017-02-17 8 views
0

Я пытаюсь развернуть мой первый безжизненный проект и хочу, чтобы он обновил простой элемент в моем 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); 
}; 

Я побежал бессерверную развернуть, и она работала на многих уровнях. Созданный мой лямбда для меня, дал мне конечную точку и функции:

конечных точек: POST - https://tbwg38fvc0.execute-api.us-east-1.amazonaws.com/dev/movies/create функции: бессерверной-DEV-привет бессерверной-DEV-createMovie

Но я запустить его в почтальона и я получаю внутреннюю ошибку сервера, и я попытался назвать: бессерверного вызова -f бессерверным-DEV-createMovie -l , и он говорит:

Serverless Ошибка ------- --------------------------------

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

Так я смущен, что я делаю неправильно , Есть ли еще одна настройка в AWS, которую мне не хватает, которую нужно настроить для вызова на работу?

ответ

2

Я думаю, что здесь есть две проблемы.

имя
  1. Функция 'createMovie', так что вы должны сказать: serverless invoke -f createMovie -l

  2. Проверьте журнал Cloudwatch внутренней ошибки сервера. Я предполагаю, что это имя таблицы dynamodb. Вы создали 'moviesTwo', но у вас есть

TableName: 'Фильмы'

Надеется, что это помогает.

+0

Номер 1 был моей первой проблемой. Когда я закончил с развертыванием, мне сказали, что мои функции были безсерверными-dev-createMovie, так что я и использовал. Благодарю. Я удаляю больше ошибок, но это привело меня в норму. –

+0

другой вопрос, сейчас я запускаю конечную точку и получаю «Неподдерживаемый тип носителя». На что это можно ссылаться? –

+0

неважно, я смотрел видео с YouTube и получил свою конечную точку для работы с почтальоном. обновил мой dynamodb тоже! Благодарю. –