Serverless Tools and Best Practices
Learn by example in this tutorial creating a serverless slack command using Node.js and Up. Learn best practices for developing serverless applications.
Throughout this series we have been exploring how to use serverless architectures to our advantage. In this article I will show you:
When I first started experimenting with serverless technology, I was amazed at the complexity of managing individual functions and environments. At first I scratched my head, and thought, “how can the cloud providers actually believe people will really adopt this”? Now that was 2015, documentation was light and tools were in their infancy. Since then, things have changed dramatically. Today, I am excited to show you just how much easier the serverless development experience has become.
I love Up for many reasons:
The project is maintained by TJ Holowaychuk, he’s built a ton of other tools that you have most likely either directly/indirectly used. He offers a Pro version for $20/month ($10/month forever with this coupon code: am-376E79B073F3) that I think is well worth the money. I specifically like the active warming feature (combats “cold-starts”); it come with a slew of other features like encrypted environment variables, instant rollbacks, asset acceleration, and alerting that the free version just doesn’t have. You can find all the details here.
For this tutorial you will need accounts on these two platforms:
And for brevity of this blog post I’ll just trust that you can get these setup items done:
The first thing we’ll do is create our Slack app. For this you’ll want to create a new app by going to https://api.slack.com/apps and clicking the Create New App button. Give your app a name, and select the workspace it should live in. Then click Create App.
Create a new Slack App
Once your app is created, click the Slack Commands from the left hand navigation menu. Then click the Create New Command button. Fill in the details like so:
Fill in the Slack Command Details
Keep this window up, we’ll come back to this
To keep this tutorial simple, I have posted all the code on github. If you really enjoy reading the code, the two main files are:
Once you have downloaded the code, make let’s make sure we install it’s dependencies:
You’ll now want to run the following commands:
# this will deploy the project to the production environment (first time could take 60s)
up deploy production
# this will copy the url of our api to our clipboard
up url production -c
Now that we have our API endpoint copied, go back to the Slack slash command page and paste the url in the Request URL field, and then click the Save button.
Next click the Install App from the left hand menu and click the Install App to Workspace button. You’ll be redirected to an authorization page. Click the Authorize button.
Install the App
Now go to your slack workspace and give it a try. The first time it might fail because of a “cold start” taking too long to respond to but the invocations after that should work just fine.
Test your command
From my experience working with serverless code, here are some tips and best practices when writing your serverless code:
- Write libraries, not functions - This will compartmentalize logic in a library that you can take to other projects. The serverless code, should really only be an adapter to the serverless platform
- Don’t count on background processing - If your an async fan, make sure all your deferred executions have finished before your function finishes. (This is a common mistake during “Lift & Shift” operations)
- Minimize cold starts - If your application is customer facing, minimize cold starts by investing in a warming solution. It’s a terrible customer experience to have a request timeout or be slow.
Below I have put together a curated list of resources for your serverless knowledge:
- Serverless Framework - This was the first tool I used, it fairly quick to get setup, but IMHO you have to configure too many settings.
In this tutorial you should have successfully created a slack command using Node.js and Up, learned best practices when it comes to developing serverless applications, and now have resources to do further reading.
I really hope you have enjoyed reading this series and were able to learn something. If you liked this one, and didn’t get a chance to read the others in the series make sure you do.