npm install -g serverless
Assuming you created a project named lambda-training, two files will be created in the lambda-training/ directory. The serverless.yml file is a configuration file that is heavily documented. The other file is handler.py which contains your lambda handler.
It is possible to have multiple lambda function (and therefore multiple handlers) in the same project, sharing code happily.
cd parent-directory
sls # and answer the few questions
Update the serverless.yml file with those values:
provider:
name: aws
runtime: python3.8
stage: dev
region: eu-west-1sls deploy
Update the serverless.yml file to add an API Gateway trigger:
functions:
hello:
handler: handler.hello
events:
- http:
path: test/path
method: get
After another sls deploy the log will contain the full URL of the new trigger. You can just cURL to see if everything is working as expected:
curl https://m0tiewu09g.execute-api.eu-west-1.amazonaws.com/dev/test/path{"message": "Go Serverless v1.0! Your function executed successfully!", "input": {"resource": "/test/path", "path": "/test/path", "httpMethod": "GET", "headers": {"Accept": "*/*", "CloudFront-Forwarded-Proto": "https", "CloudFront-Is-Desktop-Viewer": "true", "CloudFront-Is-Mobile-Viewer": "false", "CloudFront-Is-SmartTV-Viewer": "false", "CloudFront-Is-Tablet-Viewer": "false", "CloudFront-Viewer-Country": "FR", "Host": "m0tiewu09g.execute-api.eu-west-1.amazonaws.com", "User-Agent": "curl/7.64.1", "Via": "2.0 47140f009c2bd3561cd6dde4003253e3.cloudfront.net (CloudFront)", "X-Amz-Cf-Id": "1K_equfBEMmbcNzevk63twWezyRpZTH5PUS39VtZz4XP3flmyxDQog==", "X-Amzn-Trace-Id": "Root=1-5e4aa8d1-e832e8eed84e4c9843ad08b4", "X-Forwarded-For": "90.109.35.122, 70.132.16.75", "X-Forwarded-Port": "443", "X-Forwarded-Proto": "https"}, "multiValueHeaders": {"Accept": ["*/*"], "CloudFront-Forwarded-Proto": ["https"], "CloudFront-Is-Desktop-Viewer": ["true"], "CloudFront-Is-Mobile-Viewer": ["false"], "CloudFront-Is-SmartTV-Viewer": ["false"], "CloudFront-Is-Tablet-Viewer": ["false"], "CloudFront-Viewer-Country": ["FR"], "Host": ["m0tiewu09g.execute-api.eu-west-1.amazonaws.com"], "User-Agent": ["curl/7.64.1"], "Via": ["2.0 47140f009c2bd3561cd6dde4003253e3.cloudfront.net (CloudFront)"], "X-Amz-Cf-Id": ["1K_equfBEMmbcNzevk63twWezyRpZTH5PUS39VtZz4XP3flmyxDQog=="], "X-Amzn-Trace-Id": ["Root=1-5e4aa8d1-e832e8eed84e4c9843ad08b4"], "X-Forwarded-For": ["90.109.35.122, 70.132.16.75"], "X-Forwarded-Port": ["443"], "X-Forwarded-Proto": ["https"]}, "queryStringParameters": null, "multiValueQueryStringParameters": null, "pathParameters": null, "stageVariables": null, "requestContext": {"resourceId": "rj6d3x", "resourcePath": "/test/path", "httpMethod": "GET", "extendedRequestId": "IC9Q0FKijoEFRaw=", "requestTime": "17/Feb/2020:14:53:05 +0000", "path": "/dev/test/path", "accountId": "651828462322", "protocol": "HTTP/1.1", "stage": "dev", "domainPrefix": "m0tiewu09g", "requestTimeEpoch": 1581951185934, "requestId": "199a0bfe-1475-4537-b92b-dfbbba4d82a1", "identity": {"cognitoIdentityPoolId": null, "accountId": null, "cognitoIdentityId": null, "caller": null, "sourceIp": "90.109.35.122", "principalOrgId": null, "accessKey": null, "cognitoAuthenticationType": null, "cognitoAuthenticationProvider": null, "userArn": null, "userAgent": "curl/7.64.1", "user": null}, "domainName": "m0tiewu09g.execute-api.eu-west-1.amazonaws.com", "apiId": "m0tiewu09g"}, "body": null, "isBase64Encoded": false}}%
Create an event.json file with your event sample
{
"queryStringParameters": {
"first_param": "any value",
"second_param": "any other value"
}
}
serverless invoke local -f hello -p event.json