visit
Once upon a time, not so long ago, a word caught my ear. Lambda. That struck a chord, remembering the good old days of playing Half-Life as a kid. Little did I know what AWS Lambda was, and how incredibly awesome it is. If you’re intrigued, stick around. I’ll only take a few minutes out of your already busy day, and you surely won’t mind.
No, not those. These!
Docker is the world’s leading software container platform. Developers use Docker to eliminate “works on my machine” problems when collaborating on code with co-workers. Operators use Docker to run and manage apps side-by-side in isolated containers to get better compute density. Enterprises use Docker to build agile software delivery pipelines to ship new features faster, more securely and with confidence for both Linux, Windows Server, and Linux-on-mainframe apps.Every time an is created, a container is spun up to serve it. It’s actually not a Docker container though, rather a proprietary container built by AWS. I just used the example so you would understand it a bit easier. The code is deployed into the container and then executed. Hence making every subsequent request faster because AWS is skipping the initial creation of the container if it already exists.
You’ll land on the Lambda homepage with a big orange button prompting you to create a new function. Well, don’t keep it waiting any longer, press it.
This will take you to the main function creation wizard. As this example will cover a basic function that will simulate a dice throw, let’s forget about the blueprints and just author one from scratch.
Awesome! Now you just need to add a name and for the function and finally start writing some code. Regarding the role, feel free to just pick an existing role such as lambda_basic_execution
. It will more than suffice for this simple example.
Make sure not to forget adding Node.js 8.10 as the runtime either. Finally, go ahead and create the function.
Great! Now you’re finally seeing some code. Much better. Let’s dive in. There are several options to take into consideration. The code entry type option sets how you will add code to the function. It can either be inline, upload a .zip file, or upload from S3.
We’ll be using the first option, editing inline. For small functions, it’s totally fine to write code inline. But when you have more code, it gets very tiresome. That’s why there is a .zip upload option which we will touch upon later as well.Set the runtime to Node.js 8.10
, which is the latest supported version of Node.js for Lambda at the time of this writing. The handler can stay the same as well. Here, the index
stands for the name of the file, while handler
is the name of the function.
With previous versions of Node.js on AWS Lambda (6.10), there were 3 main parameters:
event
parameter contains the current event info. That means the event that triggers the function will send along information to the function to use. An example would be the data an HTTP request sends along to the endpoint, such as whether it has request parameters or a body.context
contains all the information about the function itself. How long it has been running, how much memory it's consuming among other things. This is viewed as the runtime information.callback
is pretty self-explanatory. When you want to tell the function to end its execution, you invoke the callback. It takes two parameters, the first is an error, the second is the data you wish to send back as the response of the Lambda function.Things have changed with Node.js 8.10
because of the addition of async/await
support. The handler
can now accept a promise value. This is why we can now assign an async function
to the handler
, and return a promise directly. No more stupid callback
parameters. So awesome!
Here goes nothing.
Nice! That does the trick. Now the function will return a random number between 1 and 6. With that out of the way let’s test it.
Press the orange test button and proceed to create a simple test event. Give it a funky name for no particular reason. Just for the fun of having a test event named FunkyName
. Now you can go ahead and test the function. After pressing the test button you'll see something like this.
The section bordered with the dashed outline shows the function output, more precisely the return value that got sent back by the function.
That was fun! You now have a roll a dice function, but no way of triggering it outside of AWS, yet.
You’ll immediately be prompted to create an API. Ignore all the suggestions and just pick New API and input a name for your API. I’m going to stick with FunkyApi, it just sounds right. Go ahead and hit create.
Now comes the fun part. Finally get to hook up the API to the function. First press the Actions dropdown and pick Create method. You’ll see another smaller dropdown show up. Press it, and pick GET. Set the integration type to Lambda Function, select the region where you created the function and write the name of your function.
Hit save and rejoice!
The API is set up and ready. You now only need to deploy it. Press the Actions dropdown once again and hit Deploy API. Pick a new Deployment Stage, write down dev as the stage name and you’re ready to deploy the API.
Finally! The API endpoint is ready. You now have access to the Invoke URL on the dev Stage Editor.
Feel free to open up the API endpoint in a browser window and check the output. What do you see? No really, what do you see? A random number between 1 and 6 should be returned back. How awesome is this!? In less than 5 minutes you’ve created a Lambda function, connected it to API Gateway and created an endpoint to be consumed whenever you like.
$ mkdir roll-a-dice && npm init -y
Once you’ve done this, go ahead and install , a simple datetime library.
$ npm install moment --save
This will create a node_modules
folder with the required dependencies. To include them you need to compress all the files and upload the .ZIP file to Lambda.
Important Note: Only compress the files and folders inside of the project directory. Do NOT zip the whole folder. If you do it will break the configuration and the Lambda function will fail!
Before you go ahead and compress the files add some code with the new npm module you just installed to make sure the Lambda function uses it.Create a new file in the project directory and name it index.js
. Paste the existing lambda function from AWS into the file and edit it slightly.
Save all the files and go ahead and zip them up. Remember, only the files and folders within the roll-a-dice directory.
You now have a .ZIP file. Go ahead and jump back to the AWS Console.
Change the Code entry type to Upload a .ZIP file and upload the file you just recently compressed. Great! Now, scroll back to the top of the page and press the big orange button once again to Save, and Test the function.
Nice! It works and it’s showing the current date and time. You zipped the function and npm module correctly. Just in case, jump back to a browser window and try the endpoint once again. It should now show the updated message.
What about having insight into your function? Easy, there’s a Monitoring tab! Here you can check out metrics about your function’s behavior.
But, it can get a bit hard to have proper insight when you have multiple functions. In that case, you might want to check out an reporting tool like , IOPipe, Datadog or something similar. Here’s an example of how gives you a proper .
Note: The Dashbird team have added a bunch of new features in the last few months, including support with X-Ray, new detailed graphs, usage based billing, a new , but also reduced the latency to under 20 seconds, meaning the dashboards update lightning fast.
Hope you guys and girls enjoyed reading this as much as I enjoyed writing it. Until next time, be curious and have fun. Feel free to join my newsletter for all future updates!
Originally published at .