I have a weird issue running AWS SAM Lambda functions which I discovered through the AWS SAM API tools. My lambda request fully completes but no response is received by the call to the function.
Technology: Windows 10 + AWS CLI + AWS SAM + IntelliJ with the AWS toolkit installed
I run SAM from the command line.
Attempts to rectify this issue include:
- reinstalling Docker for Windows with WSL
- cleared all data folders for Docker
- Drop all docker containers and images
- running Docker without WSL using Hyper-V
- reinstalling the AWS CLI and SAM CLI from scratch after a full reinstall
- repairing the AWS CLI and SAM CLI
- restarted my computer
- Updating the timeuot in my template.yaml to 10 seconds
- A combination of the above
There is still no response. The function is the basic one created by Intellij for node.js 12. The console.log statements work. The strange part is that it appeared to work for the first several attempts but became unresponsive I tried to use serverless to match the aws-lambda api package example in NodeJS for CORS.
My app.js code:
// const axios = require('axios')
// const url = 'http://checkip.amazonaws.com/';
let response;
/**
*
* Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
* @param {Object} event - API Gateway Lambda Proxy Input Format
*
* Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html
* @param {Object} context
*
* Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
* @returns {Object} object - API Gateway Lambda Proxy Output Format
*
*/
exports.lambdaHandler = async (event, context, callback) => {
console.log('Received event:', JSON.stringify(event, null, 2));
context.callbackWaitsForEmptyEventLoop = false
try {
// const ret = await axios(url);
response = {
'statusCode': 200,
'body': JSON.stringify({
message: 'hello world',
// location: ret.data.trim()
})
}
} catch (err) {
console.log('[Handler] - Main function: ', err);
return err;
}
console.log(response)
callback(null, response)
//return response * also fails with the same output
};
My template.yml:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
AWS
Sample SAM Template for AWS
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello-world/
Handler: app.lambdaHandler
Runtime: nodejs12.x
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: get
Outputs:
# ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
# Find out more about other implicit resources you can reference within SAM
# https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
HelloWorldApi:
Description: "API Gateway endpoint URL for Prod stage for Hello World function"
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
HelloWorldFunction:
Description: "Hello World Lambda Function ARN"
Value: !GetAtt HelloWorldFunction.Arn
HelloWorldFunctionIamRole:
Description: "Implicit IAM Role created for Hello World function"
Value: !GetAtt HelloWorldFunctionRole.Arn
The commands used to start lambda [same error occurs using start-api]: sam local start-lambda
Docker is running.
The command then used to test the function:
aws lambda invoke --function-name "HelloWorldFunction" --endpoint-url "http://127.0.0.1:3001" --no-verify-ssl out.txt
The console logs:
Mounting C:\xxxxx\HelloWorldFunction as /var/task:ro,delegated inside runtime container
EST←[0m
2020-10-20T02:19:57.531Z 52435aa1-18cd-10ea-6238-f3065012cca7
2020-10-20T02:19:57.535Z 52435aa1-18cd-10ea-6238-f3065012cca7
INFO { statusCode: 200, body: '{"message":"hello world"}' }
←[32mEND RequestId: 52435aa1-18cd-10ea-6238-f3065012cca7←[0m
←[32mREPORT RequestId: 52435aa1-18cd-10ea-6238-f3065012cca7 Init Duration: 289.89 ms Duration: 8.17 ms Billed Duration: 100 ms
Memory Size: 128 MB Max Memory Used: 48 MB ←[0m
Function 'HelloWorldFunction' timed out after 3 seconds
Invoking app.lambdaHandler (nodejs12.x)
Skip pulling image and use local one: amazon/aws-sam-cli-emulation-image-nodejs12.x:rapid-1.6.2.
Mounting C:\xxxxx\HelloWorldFunction as /var/task:ro,delegated inside runtime container
←[32mSTART RequestId: be9410b4-deee-1639-5c0d-b08114bfb814 Version: $LATEST←[0m
2020-10-20T02:20:26.016Z be9410b4-deee-1639-5c0d-b08114bfb814
INFO Received event: {}
2020-10-20T02:20:26.021Z be9410b4-deee-1639-5c0d-b08114bfb814
INFO { statusCode: 200, body: '{"message":"hello world"}' }
←[32mEND RequestId: be9410b4-deee-1639-5c0d-b08114bfb814←[0m
←[32mREPORT RequestId: be9410b4-deee-1639-5c0d-b08114bfb814 Init Duration: 163.68 ms Duration: 9.80 ms Billed Duration: 100 ms
Memory Size: 128 MB Max Memory Used: 46 MB ←[0m
Function 'HelloWorldFunction' timed out after 3 seconds
Does anyone know what the issue may be? How can I solve this?