JohnSmith
JohnSmith

Reputation: 81

AWS API GATEWAY - empty response body

I'am using node serverless and python to deploy service on AWS. Services used: S3, API-Gateway, Cloudformation, Lambda.

The problem is... I am getting empty response body:

{
  "statusCode": 200,
  "isBase64Encoded": false,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": "{}"
}

The field "body" is empty. It is same when I test with POSTMAN. but when I test on lambda it works fine:

{
  "statusCode": 200,
  "isBase64Encoded": false,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": "{\"55b7badc-75af-41c0-9877-af308264cb33\":\"0.4666666666666667\",\"4694e172-322e-4a51-930e-d3b9bfd3c2e6\":\"0.36363636363636365\",\"c5447cc5-936d-4aa6-97c4-3f51a7e7c283\":\"0.3\",\"6abf0893-5d32-4a43-942f-aaef4395d91d\":\"0.2727272727272727\",\"c0bf1214-fb41-48eb-b07d-f81b71ba0061\":\"0.25\"}"
}

Here is the yml file:

service: collaborative

provider:
  name: aws
  runtime: python3.6
  region: eu-west-1

defaults:
 stage: dev1
 region: eu-west-1

package:
  include:
    - collaborative
  exclude:
    - .git
    - .idea
    - .col_ser.txt

custom:
  integration: lambda

functions:
  collaborative:
    name: lambda-collaborative
    handler: handler.lambda_handler
    events:
      - http:
          path: recommend_user
          method: post
          integration: lambda
          cors: true
          request:
            template:
              text/xhtml: '{ "stage" : "$context.stage" }'
              application/json: '{ "httpMethod" : "$context.httpMethod" }'
          response:
            headers:
              Access-Control-Allow-Origin: "'*'"
            statusCodes:
              400:
                pattern: '.*wrong.*'
                template:
                  application/json: >
                    #set ($errorMessageObj = $input.path('$.errorMessage'))
                    $errorMessageObj

Resources:
  ApiGatewayMethodRecommenduserPost:
    Type: AWS::ApiGateway::Method
    Properties:
      Integration:
        IntegrationHttpMethod: POST
        Type: lambda

Upvotes: 8

Views: 7033

Answers (1)

John
John

Reputation: 1092

If you have invoked your lambda function asynchronously from API Gateway then it's normal to receive an empty response because in this case, API Gateway does not wait for lambda to response back and simply return an empty response. However, you can create your own integration response template from API gateway depending upon the status code.

If you have invoked synchronously and still haven't received the response then you can also invoke your lambda function from API gateway and observe if your lambda function is working properly or not.

Upvotes: 2

Related Questions