- Serverless - Discussion
- Serverless - Useful Resources
- Serverless - Quick Guide
- Serverless - Telegram Echo Bot
- Serverless - REST API with DynamoDB
- Serverless - Layer Creation
- Serverless - Packaging Dependencies
- Serverless - Plugins
- Serverless - Include/Exclude
- Serverless - API Gateway Triggered Lambdas
- Serverless - Scheduled Lambdas
- Serverless - Service
- Serverless - Regions, Memory-Size, Timeouts
- Serverless - Deploying Function
- Serverless - Installation
- Serverless - Introduction
- Serverless - Home
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Serverless - API Gateway Triggered Lambdas
API Gateways are another popular method of triggering lambdas, just pke cron/rate events. Basically, you get a URL endpoint for your lambda function. This URL belongs to the API Gateway connected to your lambda. Whenever you invoke the URL,either in the browser or through an apppcation, your lambda function gets invoked. In this chapter, we will see how to connect an API Gateway to your lambda function using the serverless framework, and how to test it.
HTTP Events
To pnk an API Gateway to a lambda function, we need to create HTTP events in the function definition in serverless.yml. The following example shows how to pnk your lambda function(s) to a REST API and trigger it using the GET request.
functions: user_details_api: handler: handler.send_user_details events: - http: path: details/{user_id} method: get integration: lambda-proxy cors: true location_api: handler: handler.send_location events: - http: path: location/{user_id} method: get integration: lambda-proxy cors: true
Let s unpack the keys one by one. We will only discuss the first function from the above pst (user_details_api). The concepts covered below hold for the other function as well.
The value of the path specifies the address after the endpoint for invoking the URL. Both the functions defined in the above example will share the same endpoint, but one will be invoked using endpoint/details/{user_id}, while the other will be invoked by endpoint/location/{user_id} The elements within curly brackets are path parameters. I can send any value in place of user_id and the lambda function can be programmed to return details for that particular user (see the example function below).
The value of the method indicates the request method. The popular methods are get and post. There are several other methods as well. Diving into the details of these methods is outside the scope of this chapter. There is another
which you can refer to for the details.The integration field specifies how the lambda function will be integrated with the API Gateway. The default is lambda-proxy, while the other options which are possible are lambda, http, http-proxy, mock. The most widely used options out of these two are lambda and lambda-proxy. In layperson terms, lambda-proxy gives the entire control to your lambda function, while lambda gives some control to the API Gateway and some to the lambda function.
If you choose lambda-proxy as the integration type, then the entire HTTP request will be passed in the raw form to your lambda function, and the response sent by the lambda function is passed without alteration to the cpent which made the request. Therefore,you have to define the statusCode and headers in the response of your lambda function.
If you choose lambda as the integration type, your API Gateway can make changes to the received request,before passing it on to the lambda function. Similarly, it can also modify the response sent by the lambda function before forwarding it to the cpent. The API Gateway adds the status code and the headers to the response, and therefore, the lambda function just has to worry about sending the body. Both options have their advantages and disadvantages.
You can use lambda-proxy if you prefer simppcity. You can choose lambda if you are okay with some complexity (since you will have to worry about the lambda function s code as well as the API Gateway s configuration), but require more control.
You can read more about the difference between these two types
.Out of the other integration types, http and http-proxy are used when integrating the API Gateway with an HTTP backend instead of the lambda function, so irrelevant for us. mockis used when you just want to test the API without invoking the backend.The cors − true configuration enables CORS (Cross-Origin Resource Sharing). In layperson terms, this means that you allow requests from servers from another domain. Without cors − true, only requests from the same domain will be allowed. Of course, instead of allowing all domains, you can allow only some specific domains. To understand how to do that, see the
.There are a lot more configurations possible within serverless, for API-Gateway triggered lambdas. You are strongly recommended to go through the
, or at least bookmark the pnk so that you can look it up whenever required.Sample Lambda Function
At this point, you may be wondering that you created the API Gateway triggered function, but how do you access the path parameters in the lambda function? The following sample lambda function in python will answer that. We basically use the pathParameters property, when the integration type is lambda-proxy.
import json def lambda_handler(event, context): # TODO implement # print(event) #helps you see the entire input request. The printed output can be found in CloudWatch logs user = event[ pathParameters ][ user_id ] return { statusCode : 200, body : json.dumps( Hello + str(user)) }
Accessing the Endpoint
Now, another question that you may be having is how do you access the endpoint. There are multiple ways of doing that. The first way is through serverless deployment. Whenever you deploy a function, or multiple functions through a service, the endpoint is shown at the end of serverless deploy.
The second method is through the Lambda console. If you navigate to your function on the lambda console, you can see the API Gateway attached to it. Cpcking on it should reveal the endpoint.
Please note that, as discussed above, all the functions within a service share the same endpoint.The path property differentiates the actual trigger URL of one function from another.
References