Deploy the APIs

From @ericorruption on Fri Apr 21 2017 09:53:44 GMT+0000 (UTC)

Hello,

I couldn’t get to the actual deploying. I followed the tutorial by the book. Got this error:

Serverless: Bundling with Webpack...
Time: 771ms
    Asset     Size  Chunks             Chunk Names
create.js  5.75 kB       0  [emitted]  create
delete.js  5.41 kB       1  [emitted]  delete
   get.js   5.5 kB       2  [emitted]  get
  list.js  5.44 kB       3  [emitted]  list
update.js  5.78 kB       4  [emitted]  update
Serverless: Packing external modules: babel-runtime@^6.23.0, uuid@^3.0.1
Serverless: Packaging service...

  Stack Trace --------------------------------------------

TypeError: Cannot read property 'path' of null
    at AwsCompileApigEvents.getHttpPath (/usr/local/lib/node_modules/serverless/lib/plugins/aws/deploy/compile/events/apiGateway/lib/validate.js:145:20)
    at _.forEach (/usr/local/lib/node_modules/serverless/lib/plugins/aws/deploy/compile/events/apiGateway/lib/validate.js:46:28)
    at arrayEach (/usr/local/lib/node_modules/serverless/node_modules/lodash/lodash.js:537:11)
    at Function.forEach (/usr/local/lib/node_modules/serverless/node_modules/lodash/lodash.js:9344:14)
    at _.forEach (/usr/local/lib/node_modules/serverless/lib/plugins/aws/deploy/compile/events/apiGateway/lib/validate.js:42:9)
    at /usr/local/lib/node_modules/serverless/node_modules/lodash/lodash.js:4970:15
    at baseForOwn (/usr/local/lib/node_modules/serverless/node_modules/lodash/lodash.js:3020:24)
    at /usr/local/lib/node_modules/serverless/node_modules/lodash/lodash.js:4939:18
    at Function.forEach (/usr/local/lib/node_modules/serverless/node_modules/lodash/lodash.js:9344:14)
    at AwsCompileApigEvents.validate (/usr/local/lib/node_modules/serverless/lib/plugins/aws/deploy/compile/events/apiGateway/lib/validate.js:41:7)
    at Object.deploy:compileEvents [as fn] (/usr/local/lib/node_modules/serverless/lib/plugins/aws/deploy/compile/events/apiGateway/index.js:42:31)
    at BbPromise.reduce (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:210:55)
From previous event:
    at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:210:22)
    at PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:225:17)
    at Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:97:31)
    at serverless.init.then (/usr/local/lib/node_modules/serverless/bin/serverless:23:50)

  Your Environment Information -----------------------------
     OS:                 darwin
     Node Version:       7.9.0
     Serverless Version: 1.11.0

I tried using older versions of aws-sdk and serverless and got the same error. I compared my codebase to the one of the examples and it’s exactly the same.

Anyone been through this?

From @ericorruption on Fri Apr 21 2017 11:50:27 GMT+0000 (UTC)

Solved it. Plain stupidity: i had path one level shallower on serverless.yml

  list:
    handler: list.main
    events:
      - http:
        path: notes

should be:

  list:
    handler: list.main
    events:
      - http:
          path: notes
1 Like

From @riogaj89 on Mon Apr 24 2017 20:08:40 GMT+0000 (UTC)

I am currently experiencing this as a response {“status”:false}

Could use any help from here?

From @jayair on Mon Apr 24 2017 20:22:30 GMT+0000 (UTC)

@riogaj89 can you show me which command is giving you that response?

From @riogaj89 on Mon Apr 24 2017 20:23:46 GMT+0000 (UTC)

Sure.

curl https://5456icd6za.execute-api.us-east-1.amazonaws.com/dev/notes \
-H "Authorization:eyJraWQiOiJPNXVpQTJQQVBEaTYxUlBqc2huN3hLZGN5ZlE1SndiellWR0VkcURBQXBZPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiI2OTFlMWEzOC01NWIzLTRmMTItYWQ0YS1jYzU2ZDViZTc4MjUiLCJhdWQiOiIzM2Y0aWV1aWF2amZ0MWZucms0NWowZWNnOCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwidG9rZW5fdXNlIjoiaWQiLCJhdXRoX3RpbWUiOjE0OTMwNjQzNjksImlzcyI6Imh0dHBzOlwvXC9jb2duaXRvLWlkcC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbVwvdXMtZWFzdC0xX2ZxUXZGTnJkWCIsImNvZ25pdG86dXNlcm5hbWUiOiJyaW9nYWpAZ21haWwuY29tIiwiZXhwIjoxNDkzMDY3OTY5LCJpYXQiOjE0OTMwNjQzNjksImVtYWlsIjoicmlvZ2FqQGdtYWlsLmNvbSJ9.a_P1IrjgT4iKUK7CIK1l2az3nQQb4c7uRfITYz8icdwzCtbCTk-nfuk_54aMmL0s2IoJ-UwEHsAEyCz_abxwF2pi7HW6pZ5GGktWAOH8U8-3jedwReyQOIBxYvW0YPadAUuPsLNtTlXNIM2TMFKIiqig7IHrlPW2CCqSt7y-760p4egIF8IIYM5EFveLYd4GSBuecWhDr2atFf9Dvn6ixjPHVfFQ9aATt4goPEtihwrgXH_7poi7N2QmGrP0o4T3Wgjl98c7oSmjxk7qBu2ivx7ihE_GYFgOFIxW4RGt4cGLwBabvdRPvBbXCrVB0lf8eBNIRgfRca7XOxbIAFqbYQ" \
-d "{\"content\":\"hello world\",\"attachment\":\"hello.jpg\"}"

From @jayair on Mon Apr 24 2017 20:54:17 GMT+0000 (UTC)

Just to double-check, did the serverless webpack invoke --function create --path event.json command in the Create Note chapter - http://serverless-stack.com/chapters/add-a-create-note-api.html work for you?

From @riogaj89 on Mon Apr 24 2017 20:58:38 GMT+0000 (UTC)

Yes it did work for me just fine.

From @jayair on Tue Apr 25 2017 17:03:56 GMT+0000 (UTC)

@riogaj89 the status: false is generated by our code, so we should be able to debug this. Above this line - https://github.com/AnomalyInnovations/serverless-stack-demo-api/blob/master/create.js#L23, can you try to console.log the error? Make sure you serverless deploy after changing it.

To see the output for this, head over to your AWS Console > CloudWatch > Logs > The Lambda we created > The most recent log stream. And see what it shows there. If you are having problems finding where to look, let me know.

From @riogaj89 on Tue Apr 25 2017 19:23:06 GMT+0000 (UTC)

It says: AccessDeniedException: User: arn:aws:sts::435241600237:assumed-role/gajen-notes-app-dev-us-east-1-lambdaRole/gajen-notes-app-dev-create is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-1:435241600237:table/notes

From @fwang on Tue Apr 25 2017 22:00:25 GMT+0000 (UTC)

@riogaj89 looks like the Lambda function does not have permission to write to the DynamoDB table. May I take a look at your serverless.yml file (iamRoleStatements section)?

From @riogaj89 on Wed Apr 26 2017 10:37:09 GMT+0000 (UTC)

Ah… Yes that was right. Managed to resolve the issue. Thank you very much fwang and jayair for the help!

From @ShaklinSyed on Wed May 03 2017 10:29:44 GMT+0000 (UTC)

I was getting the status:fasle response, so consoled the error and i got the error response as follows {"status":{"message":"One or more parameter values were invalid: Missing the key userid in the item","code":"ValidationException","time":"2017-05-03T10:24:54.551Z","requestId":"5GA3CQH984DC39OPREJIF8MVORVV4KQNSO5AEMVJF66Q9ASUAAJG","statusCode":400,"retryable":false,"retryDelay":24.05818543697169}}

From @fwang on Wed May 03 2017 19:21:48 GMT+0000 (UTC)

@ShaklinSyed At which step did you run into this error?

It sounds look like there is a mismatch between the key name defined in DynamoDB table and that used in the Lambda code. Double check the key name is consistent. (ie. key names in the tutorial are in camel case - userId with capital ‘I’)

From @ShaklinSyed on Thu May 04 2017 05:15:04 GMT+0000 (UTC)

@fwang Fixed it. works now. Thanks.

From @eloquentbit on Sat May 06 2017 07:36:53 GMT+0000 (UTC)

Hi, great guide! I can’t deploy on AWS:

Serverless: Bundling with Webpack...
Time: 761ms
            Asset     Size  Chunks             Chunk Names
        create.js  6.35 kB       0  [emitted]  create
        delete.js  5.46 kB       1  [emitted]  delete
           get.js  5.62 kB       2  [emitted]  get
       handler.js  2.28 kB       3  [emitted]  handler
          list.js  5.83 kB       4  [emitted]  list
        update.js   6.2 kB       5  [emitted]  update
webpack.config.js  3.19 kB       6  [emitted]  webpack.config
Serverless: Packing external modules: babel-runtime@^6.23.0, uuid@^3.0.1
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (1.03 MB)...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - scratch-app-api-prod
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - CreateLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Permission - 1UnderscorevTBvqUZ8BLambdaPermissionApiGateway
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - UpdateLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - CreateLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - CreateLogGroup
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - ListLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - UpdateLogGroup
CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - UpdateLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - DeleteLogGroup
CloudFormation - CREATE_FAILED - AWS::Lambda::Permission - 1UnderscorevTBvqUZ8BLambdaPermissionApiGateway
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - GetLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - ListLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - DeleteLogGroup
CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - ListLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - GetLogGroup
CloudFormation - CREATE_FAILED - AWS::Logs::LogGroup - GetLogGroup
CloudFormation - CREATE_FAILED - AWS::Logs::LogGroup - DeleteLogGroup
CloudFormation - CREATE_FAILED - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - UPDATE_ROLLBACK_IN_PROGRESS - AWS::CloudFormation::Stack - scratch-app-api-prod
CloudFormation - UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - scratch-app-api-prod
CloudFormation - DELETE_IN_PROGRESS - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - DELETE_COMPLETE - AWS::Lambda::Permission - 1UnderscorevTBvqUZ8BLambdaPermissionApiGateway
CloudFormation - DELETE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - DELETE_IN_PROGRESS - AWS::Logs::LogGroup - CreateLogGroup
CloudFormation - DELETE_IN_PROGRESS - AWS::Logs::LogGroup - ListLogGroup
CloudFormation - DELETE_IN_PROGRESS - AWS::Logs::LogGroup - UpdateLogGroup
CloudFormation - DELETE_IN_PROGRESS - AWS::Logs::LogGroup - DeleteLogGroup
CloudFormation - DELETE_IN_PROGRESS - AWS::Logs::LogGroup - GetLogGroup
CloudFormation - DELETE_COMPLETE - AWS::ApiGateway::RestApi - ApiGatewayRestApi
CloudFormation - DELETE_COMPLETE - AWS::Logs::LogGroup - CreateLogGroup
CloudFormation - DELETE_COMPLETE - AWS::Logs::LogGroup - DeleteLogGroup
CloudFormation - DELETE_COMPLETE - AWS::Logs::LogGroup - GetLogGroup
CloudFormation - DELETE_COMPLETE - AWS::Logs::LogGroup - ListLogGroup
CloudFormation - DELETE_COMPLETE - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - DELETE_COMPLETE - AWS::Logs::LogGroup - UpdateLogGroup
CloudFormation - UPDATE_ROLLBACK_COMPLETE - AWS::CloudFormation::Stack - scratch-app-api-prod
Serverless: Deployment failed!

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

     An error occurred while provisioning your stack: 1UnderscorevTBvqUZ8BLambdaPermissionApiGateway
     - Unable to parse HTTP response content.

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Forums:        forum.serverless.com
     Chat:          gitter.im/serverless/serverless

  Your Environment Information -----------------------------
     OS:                 darwin
     Node Version:       7.10.0
     Serverless Version: 1.12.1

This is my serverless.yml file:

service: scratch-app-api

# Use serverless-webpack plugin to transpile ES6/ES7
plugins:
  - serverless-webpack

# Enable auto-packing of external modules
custom:
  webpackIncludeModules: true

provider:
  name: aws
  runtime: nodejs6.10
  stage: prod
  region: eu-west-1

  # 'iamRoleStatement' defines the permission policy for the Lambda function.
  # In this case Lambda functions are granted with permissions to access DynamoDB.
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:eu-west-1:*:*"

functions:
  # Defines an HTTP API endpoint that calls the main function in create.js
  # - path: url path is /notes
  # - method: POST request
  # - cors: enabled CORS (Cross-Origin Resource Sharing) for browser cross
  #     domain api call
  # - authorizer: authenticate the api via Cognito User Pool. Update the 'arn'
  #     with your own User Pool ARN
  create:
    handler: create.main
    events:
      - http:
          path: notes
          method: post
          cors: true
          authorizer:
            arn: arn:aws:cognito-idp:eu-west-1:277846935261:userpool/eu-west-1_vTBvqUZ8B

  get:
    handler: get.main
    events:
      - http:
          path: notes/{id}
          method: get
          cors: true
          authorizer:
            arn: aws:cognito-idp:eu-west-1:277846935261:userpool/eu-west-1_vTBvqUZ8B

  list:
    handler: list.main
    events:
      - http:
          path: notes
          method: get
          cors: true
          authorizer:
            arn: arn:aws:cognito-idp:eu-west-1:277846935261:userpool/eu-west-1_vTBvqUZ8B

  update:
    handler: update.main
    events:
      - http:
          path: notes/{id}
          method: put
          cors: true
          authorizer:
            arn: arn:aws:cognito-idp:eu-west-1:277846935261:userpool/eu-west-1_vTBvqUZ8B

  delete:
    handler: delete.main
    events:
      - http:
          path: notes/{id}
          method: delete
          cors: true,
          authorizer:
            arn: arn:aws:cognito-idp:eu-west-1:277846935261:userpool/eu-west-1_vTBvqUZ8B

From @fwang on Sun May 07 2017 13:31:00 GMT+0000 (UTC)

Is the comma ‘,’ at the end of the last cors:true in your serverless.yml?

From @eloquentbit on Mon May 08 2017 10:31:52 GMT+0000 (UTC)

Thanks @fwang, I fixed the code but unfortunately the problem persists

From @alpiepho on Mon May 08 2017 20:30:11 GMT+0000 (UTC)

Most of the example files refer to “us-east-1”. I happen to be on “us-west-2”. I cut/pasted the original serverless.yml files somewhere thru the tutorial and didn’t catch the differences. After changing it to “us-west-2” in the iamRoleStatements:Resources section, my test of the deployed system succeeds. (So I am inferring that was my problem).

My suggestion is to update the tutorials to illustrate the need to change these fields. Please don’t change it to something like USE_YOUR_REGION. The actual region string format is useful. Just need to know that they need to change.

Thanks Jay for the quick Chat response.

From @jayair on Wed May 10 2017 02:04:17 GMT+0000 (UTC)

@alpiepho yeah the region thing can be a gotcha for people. I’ll try and find the places that need the heads up.

From @mitchallen on Thu May 11 2017 20:22:56 GMT+0000 (UTC)

$ aws --version
aws-cli/1.10.24 Python/2.7.10 Darwin/15.6.0 botocore/1.4.15

When I try to run the aws cognito-idp admin-initiate-auth command I get back an error with a list of commands that don’t include admin-initiate-auth.

If I run:

$ aws cognito-idp help

It isn’t included as a listed option:

   o add-custom-attributes
   o admin-confirm-sign-up
   o admin-delete-user
   o admin-delete-user-attributes
   o admin-disable-user
   o admin-enable-user
   o admin-get-user
   o admin-reset-user-password
   o admin-set-user-settings
   o admin-update-user-attributes