2017-02-17 14 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にそれを追加しました: リソース:

handler.jsで
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 

My機能は次のとおりです。

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

をしかし、私は郵便配達でそれを実行そして、私は内部サーバーエラーを取得し、私が呼び出してみました:サーバレス-devのは-createMovieは を-l -f サーバレスを呼び出すと、それは言う:

サーバレスエラー------- --------------------------------

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

だから私は私が間違っているの何混乱しています。 AWSにもう1つの設定がありますか?私は、呼び出しが機能するように設定する必要がありますか?

答えて

2

私はここに2つの問題があると思います。内部サーバーエラーのためserverless invoke -f createMovie -l

  • チェックCloudWatchのログ:あなたが言う必要があるので、

    1. 関数名は 'createMovie' です。私はそれがdynamodbのテーブル名だと思います。あなたは 'moviesTwo' を作成しましたが、あなたは

    テーブル名を持っている: '映画'

    希望はこのことができます。

  • +0

    番号1が私の最初の問題でした。私がデプロイを終えたとき、私の機能はserverless-dev-createMovieであると私に言いました。ありがとう。私はより多くのバグを取り除いていますが、これは私を軌道に乗せました。 –

    +0

    別の質問ですが、私は現在エンドポイントを実行していて、「サポートされていないメディアタイプ」を取得しています。それは何を指すのでしょうか? –

    +0

    心配しないで、私はYouTubeのビデオを見て、郵便配達員と仕事をするために私のエンドポイントを得ました。私のdynamodbも更新されました!ありがとう。 –

    関連する問題