Basics of AWS Lambda
Tags: aws, webdev, beginners, lambda
Published: 2021-12-16 16:47:59

#### YOU HAVE BEEN WARNED!
_You see, I'm no expert at Amazon Web Services (AWS) or Lambda functions. As a matter of fact, I only just started learning about them 2 weeks ago and have since played around with it during my internship. So please don't come at me if this post isn't as informative as you might have expected. Maybe look at this post as a sort of learning diary by yours truly! With that said, let's get started!_

## Table of Contents
1. [What is Lambda](#what-is-lambda)
2. [Why Lambda](#why-lambda)
4. [How Lambda](#how-lambda)
8. [Closing Remarks](#closing-remarks)

## What is Lambda
Like many of you, I've seen the words AWS and Lambda before on the internet but never knew what they meant or what they represented. But now, I'm no longer a lost sheep. So here is some background of AWS and Lambda.

#### AWS
Amazon Web Services or AWS in short, is a subsidiary of Amazon (thank you Papa Bezos) that provides on-demand _cloud computing_ platform and APIs for companies and individuals. To clarify the technical jargon _cloud computing_, it is simply an access to required services such as servers, databases, networking without having to care about managing the actual computer resource. I know, sounds fancy, but that's just the tip of the iceberg of what AWS can offer. Once again, I'm no AWS sensei so we'll only be focusing on one of the services AWS offers - Lambda.

#### Lambda
As defined on the AWS website, 
> AWS Lambda is a serverless, event-driven compute service that lets you run code for virtually any type of application or backend service without provisioning or managing servers. 

So, the word _serverless_, is a tad bit misleading. It doesn't mean that there aren't any servers. It just means that we don't have to worry about whether our servers have enough resources for our application. All that will be taken care of by AWS. With that said, Lambdas are simply functions that run on these servers that are provisioned by AWS. 

## Why Lambda
All this is cool and all but why should YOU use AWS and Lambda? As mentioned earlier, AWS provides a myriad of services. If you're creating your next great startup that requires storage, computing power, databases, analytics and so on. AWS has you covered by being able to offer you all these services under one roof. It makes your development process much more efficient and scalable. So, if you have a resource hungry function that needs integration with a load of different services, why not use Lambda as well.

## How Lambda
I know the section title is grammatically incorrect but I just wanted it to fit nicely with the rest of the section titles. Anyways, in this section I'll go through with you a simple step by step process on how I created my first Lambda using the AWS Console. If you haven't already created an AWS account, please do so because I'll be skipping that part and going straight into meat of the matter.

#### Step 1: Navigating to the Lambda Service
![Navigating to the Lambda Service](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lm3y6m61n3o797tcsd7t.png)Navigating around the AWS console is as simple as searching for the required service on the search bar located at the top of the screen. Once there, you can go ahead and click on 'Create Function'.

#### Step 2: Creating the function
![Blueprint](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2gxlwwt52zrrrnohdn7q.png) Here, we have 4 options we can choose from but as beginners, we can choose to just focus on the first 2 options.

1. <u>Author from scratch</u> means to write the function from scratch
2. <u>Use a blueprint</u> means that we can choose from a wide selection of templates to base our function off of.

In our case, we will be choosing the latter, and using a Node.js hello-world blueprint. Then, we can go ahead and continue configuring.

#### Step 3: Configuration 
![Basic Info](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e1tu5thtzdhb46am5gql.png)At this stage, you can set the name of your function and also set the execution role. _What's an execution role?_ As mentioned earlier, Lambdas have the power to access other services. By default, its access is not authorized. For starters, selecting the 'Create new role with basic Lambda permissions' will allow us to use the CloudWatch Logs service, a service that helps us collect and store the logs of our Lambda. This should suffice for now but the role can be further modified in the future to allow access to other services whenever you need them.

![Code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3hkzl4zbtwj4o6pdoml4.png)Lastly, the code from the blueprint is also shown right before you finalise the process by clicking 'Create function'.

#### Step 4: Modifying the Code
![Modifying the Code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vbeodmytvex3gv0ocfaj.png) Now that we have created the Lambda, there seems to be a lot to unpack - code properties, runtime settings, layers, throttle bla bla bla. But today, we'll just focus on deploying and running the function. 

Before I give a rundown of the code, let me perform some modifications to it so I don't seem like such an amateur.
```javascript
exports.handler = async (event, context) => {
    var article = event.article
    var followers = event.followers
    
    // Thank you to my followers
    followers.forEach(follower => console.log(`Hello ${follower}! Thank you for following and reading my posts!`));
    
    // A shoutout to an interesting article
    console.log(`Here's an article I read recently! ${article.title} by ${article.author}`) 

    return 'All Done!'
};
```
Let me now give a quick breakdown of the template syntax. `handler` in the `index.js` (the entry point) is simply the function that will be called whenever the Lambda is being invoked. This function takes in 2 parameters - `event` and `context` - with the former being the more important one. 

`event` can be seen as the input to the function. This parameter can be in the form of a string, array or more commonly an object. 

`context` parameter is an object that provides methods and properties that provide information about the invocation, function, and execution environment. For this example, this parameter is not as important. 

Now, let's just straight into testing it so we can see what it does! Don't forget to click on 'Deploy' whenever you make any changes to the code.

#### Step 5: Testing
![Testing](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9n1d6b4woxf89liqjpeh.png) Under the testing tab is where can configure our input. Our input is an object that consists 2 properties - `article` and `followers`.

`article` is a nested object that has the `author` and `title` properties, corresponding to an insightful article that I recently read.

`followers` is an array that contains my first 10 followers since I joined Dev.to 3 weeks ago.

With our test input settled, we can go ahead and click 'Test'.

#### Step 6: Results
![Results](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ta5up91fj94qlmvqwxgt.png) Given the simplicity of our function, the execution was completed in mere milliseconds. Let's now focus our attention to the Log Output.
```
START RequestId: c9da68e2-f02a-49bd-ab0c-294fe5f1aeda Version: $LATEST
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @leeraiyan! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @tarantool! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @ravitejamannam! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @martinkr! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @xingtler! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @chawn! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @coder5010! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @sabiyatabassum! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @chesecheif! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Hello @smpofana! Thank you for following and reading my posts!
2021-12-16T15:50:49.461Z	c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	INFO	Here's an article I read recently! 25 Website Performance Metrics to Watch in 2022 by anthonynsimon
END RequestId: c9da68e2-f02a-49bd-ab0c-294fe5f1aeda
REPORT RequestId: c9da68e2-f02a-49bd-ab0c-294fe5f1aeda	Duration: 19.03 ms	Billed Duration: 20 ms	Memory Size: 128 MB 	Max Memory Used: 55 MB	Init Duration: 143.67 ms	
```
As expected, the output included all the logs that were intended, thanking my first 10 followers and giving a shoutout to  anthonysimon's article, [25 Website Performance Metrics to Watch in 2022](https://dev.to/panelbear/25-website-performance-metrics-to-watch-in-2022-4f60). In addition to that, we can see how long each step took, the total execution duration and how much memory was used.

And that's it! We've created our first Lambda function using the AWS console! I know I know, it isn't super impressive but we all start somewhere!

#### Step ???: Additional Information
Now, you might have been afraid when you saw 'Billed Duration' in the summary after invoking your Lambda function. If you're a broke university kid like me or you're just stingy with your money, fret not! AWS makes sure that you only pay for what you use, charged based on the number of function calls and the time it takes to execute it. Per month, users have 1 million free requests and 400,000 GB-seconds free (up to 3.2 million seconds of compute time) to play around with. Thereafter, Amazon charges users as little as $0.0000002 per request and $0.00001667 for every GB-second used, depending on your [region](https://aws.amazon.com/lambda/pricing/).

If you're just playing around and not trying to build the next unicorn company, then you won't have to worry about paying for now!
 
## Closing Remarks
There you have it! I hope this article gives a rough overview on how to create a Lambda on AWS and maybe even give you a glimpse on how you can use it in your next project. This tutorial handles all the intricacies of making a Lambda using the web console. However, if you want to feel more like a _hackerman_, you can rest easy knowing that this entire process of creating, deploying and updating a Lambda can be done in a local environment like VSCode. I'll delve deeper into this topic in the future when we explore the [Serverless Framework](https://www.serverless.com/)!