in , , , , ,

What are Serverless functions? How to deploy Serverless on AWS Lambda?

Serverless is the new talk of the town. Serverless essentially means running code without servers or running code on servers which don’t have to provisioned in advance. The user only pays for the amount of CPU and RAM used for running the code and not for the entire time the server was running.

In a server world, to run code we first provision a server. A server can cost from anything between USD 3.50 (on AWS LightSail) to several 100 dollars for a large EC2 instance. After that code is deployed on the server. The user pays for the entire month, it doesn’t matter if the server is processing any requests or not.

How does Serverless work (AWS Lambda)?

AWS Lambda is the de facto leader and torch bearer in the serverless world. In the serverless world the code is executed only when it receives a request. AWS has a large number of shared servers which execute customer’s lambda requests.

So when a request to a lambda function is received then AWS first deploys this code on their cluster and then it executes the code. After the execution, the response is returned.

The above might look a bit hectic and may appear as if serverless functions are slow. But AWS has spent a lot of time in optimizing AWS Lambda. A simple function has latency less than 10 ms.

Deploying code to AWS Lambda.

You can use the UI to deploy code and test a lambda function. However, the recommended way is to use the AWS Serverless Application Model or AWS SAM. SAM is a lot like AWS cloudformation templates but built keeping serverless in mind. Here is a simple SAM template for a hello world function. You can learn more about it here.

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: A starter AWS Lambda function.
Parameters: 
    IdentityNameParameter: 
      Type: String
Resources:
  helloworldpython3:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: .
      Description: A starter AWS Lambda function.
      MemorySize: 128
      Timeout: 3
      Policies:
        - SESSendBouncePolicy:
            IdentityName: !Ref IdentityNameParameter

AWS let’s you create a sample SAM application with a few clicks. You can also chose from one of their many SAM templates. You can browse sample SAM templates on their git respository as well.

This is the sample python code for “Hello World”:

import json

print('Loading function')

def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['key1'])
    print("value2 = " + event['key2'])
    print("value3 = " + event['key3'])
    return event['key1']  # Echo back the first key value
    #raise Exception('Something went wrong')

What about APIs? Or remote invocation?

AWS Lambda is inside AWS’s account and can not be invoked from outside world. To invoke lambda from an endpoint, it needs to integrated with API Gateway. API Gateway is used to filter, structure and pass all requests it received to AWS Lambda. API Gateway supports swagger models as well which is part of Open API initiative.

After AWS lambda’s success, various companies have launched their own serverless systems. Users have a wide variety of services to chose from. Users can run their serverless code on Microsoft functions, IBM’s serverless, Google functions or even run serverless node.js functions on Ethereum’s blockchain.

What do you think?

2 points
Upvote Downvote

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Loading…

0

Comments

0 comments

Slavery! Holocaust! What do you think are the horrible things we are doing right now that would shock our future generations?

Google Launches Stadia, a Video Game Streaming Platform