Cloud computing has revolutionized the IT industry by providing infrastructure as a service. Companies/Individuals can launch their servers on a cloud without purchasing single hardware, moreover, they don’t have to spend a single penny on maintenance and administrations. Servers can be launched on AWS cloud in no time and you have to pay for what you use.
In 2014, AWS came up with something even more interesting called AWS Lambda in which you can deploy smaller on-demand applications without hosting any servers thus called Serverless computing. It is an event-driven framework that runs stateless code in the background in response to some events and automatically manages the computing resources (CPU/Memory) required for it.
Characteristics of AWS Lambda
- Lambda functions will run your code only when called directly or when triggered by some outside event.
- It scales automatically which means it can handle from a few hundred requests to thousands of requests per second. You need not add or delete machines manually.
- It manages the computing requirement automatically which means you need not provide any CPU, memory, network, and other resources.
- You have to pay only for the time your code is running.
- Lambda functions should be stateless functions, which means each invocation is independent of previous invocations, and you cannot save or exchange data.
- It supports various runtimes – Node.Js, Java, Python, .NET, Go, Ruby, Rust
- Lambda functions should not be a long-running process; it can run for a maximum of 15 minutes.
Invoking Lambda Functions
- You can invoke Lambda functions directly using Lambda Console, Lambda API, or SDK
- You can configure your lambda function to be invoked in case of a cloud watch event.
- S3 can be configured to invoke your Lambda function in case a bucket is created or an object is added/updated in a bucket.
- Amazon SQS, Kinesis stream, and Dynamo DB can also send data in batches and invoke AWS lambda
- It can also be triggered with HTTP requests using API gateway (API gateway is another Java Web Development service provided by amazon to expose services as API and handle HTTP requests).
When not to use AWS Lambda
- When you need more control over your application such as operating system, security control.
- When your code is written in some language other than provided by AWS Lambda.
- When you need to run a long process (more than 15 mins)
Launching your first Lambda Function
Step1: Select Lambda Service
Sign-in into AWS console https://aws.amazon.com/console/ using your AWS credential. If you are new to AWS you can create a new account. AWS provides 12 months of free tier access for selected services. The Lambda free tier includes 1M free requests per month and 400,000 GB-seconds of compute time per month. Once you are on AWS console, click on services and then select Lambda, this will take you to lambda screen.
Step2: Create Function
Click on build a function to create your first Lambda Function.
Step3: Choose Options
On the next screen, you can choose whether you want to write your function from scratch, or to build a lambda function using some blueprints/sample code for common scenarios provided by AWS or you can get a sample lambda application from AWS repository. For this blog, I choose the “Use a blueprint” option to continue.
Step4: Choose Blueprint
Once you hit continue you will get several blueprints available to start with and these blueprints can make your life easy since a lot of code is already written for some common scenarios. You can select any blueprint based on your requirements and language dependency and then configure the code accordingly. For example
S3-get-object-python: This is blueprint is written in python and it triggers the lambda function to retrieve the metadata for the object stored in configured S3 bucket whenever that object is updated.
Microservice-http-endpoint-python: In this blueprint/template, Lambda function is triggered by APIs’ (HTTP Requests) and these APIs’ are exposed to outer world using API gateway. This lambda function can read/write data from/to dynamo DB to serve those APIs’ calls.
Similarly, there are hundreds of blueprints available to start with but for this blog, I selected “s3-get-object-python” and then clicked on configure button on bottom right of screen.
Step5: Basic Info
On this screen, you have to provide basic information about your lambda function such as function name. You also need to set permission for your AWS Lambda function to access S3 buckets so you need to create an appropriate IAM role for the same. In the execution role, you can choose whether you want to create a new role with basic permission or use an existing role, or create a role with some existing policy templates.
Step6: Role info
When you scroll down on the same screen, you are required to provide role information such as role name and to select policy template, which will contain all access permissions that will be provided to your lambda function. For the selected blueprint, “S3 read-only permission” is already set, you can add other permissions such as providing read/write access to dynamo DB, SQS permission, and many more if you want to integrate your lambda function with other AWS services. For this blog, I will go ahead with S3 read-only permission.
Step7: Trigger Info
In the next section on the same screen, you will be required to provide the trigger information, which means by what event your lambda function will be triggered. In this scenario, we have to define the S3 bucket name, event type (such as PUT/POST/DELETE, etc.) of a new object and you can define the prefix and suffix. For example, I configured that my lambda function should be triggered whenever any new object with a suffix of “.jpg” is created in my S3 bucket named “s3sample22”.
Step8: Lambda Function
In next section on same screen, you can see preconfigured lambda code provided by a selected blueprint. This lambda function is written in python and is primarily reading the object from S3 bucket and then returning its content type to API. You can further configure this lambda function according to your need. You can also modify your lambda function later on. Finally hit the create function button on bottom right of your screen to continue.
Step9: Final Screen
This will be the final screen for your lambda function where you can edit your lambda code, add new triggers, test your code by creating S3 events, set the environment variables, and can even change the runtime from python to any other language. You can view logs in Cloudwatch by clicking on the Monitoring tab.
Lambda functions are undoubtedly innovative, low maintenance, low cost, scalable, and effective way to create Dynamics CRM services without carrying the burden to host any servers. Lambda functions are the future of serverless applications.