Cloudtops – A Remote Workstation
Nov 15, 2023 · 6 min read
Together with my team, we developed a novel and successful new approach for deploying remote workstations for data scientists.
A former colleague of mine coined the term "cloudtop" on our MLOps team two years ago when we were developing a remote workstation for Data Scientists on AWS. He was mostly joking, but I wouldn't let the name go and it ended up sticking. Little did we know that this trend already existed and was gaining momentum throughout the world!
What is a Cloudtop?
A "cloudtop" is a bit of a play on words. You've heard the words "desktop" and "laptop" before – You might even be using one to read this article! A desktop is understood as a computer that sits on a desk, while a laptop is a portable computer that can sit on your lap. In a similar vein, a cloudtop is also a computer... but one that sits in the Cloud.
The advent of cloud technology has opened up a realm of new possibilities for the digital world. One of those possibilities is the ability to remotely access powerful resources that are hosted in data centers across the world. A "cloudtop" is a remote development environment (e.g., a computer) that is hosted in the cloud and can be provisioned with whatever resources that you might need (i.e., advance hardware, lightning fast networks, powerful security, etc.). The benefits of such a device are many and can be read about further in the next section.
NOTE: My preferred cloud is Amazon Web Services. Because of that, this article will be written under that premise. To disambiguate what a cloudtop is, I use Amazon EC2 instances and pair them with a docker dev container to make a *chef's kiss* of a remote workstation. There are many other options, like GitPods or GitHub Codespaces, that might also be of interest to you.
Why Use a Cloudtop?
You might be asking yourself, "Who would use a cloudtop?" 🤔 Well, anyone who has the need (duh), but one primary audience are those who work in fields like Data Science, Machine Learning, and Artificial Intelligence. Practitioners in these fields typically need access to more powerful resources than a typical laptop or desktop can (or should) offer. Because of this, we're seeing an increasing amount of teams and companies offering their employees such virtual development environments in the cloud (e.g., cloudtops) to better perform their work.
With anything, there are trade-offs. Cloudtops have been incredibly useful for myself and the teams that I've supported over the past few years.
Here are some of the advantages and disadvantages we've found with using cloudtops:
Advantages
More hardware options
More storage options
Simplifier and more secure networking
Faster network bandwidth
Reproducible and scalable dev environments
Improved onboarding for new team members
Disadvantages
Pay-per-use costs for using cloud infrastructure. These costs can be minimized, but will never be fixed.
You might be constrained to using a centralized team (i.e., IT, DevOps, MLOps, etc.) to provide you with cloud infrastructure. If that's the case, you will need to broker an agreement with these folks to (1) offer and (2) maintain your cloudtop(s) on your behalf. That comes with a non-zero cost in operational overhead on them and, depending on the dynamics of your relationship, can be costly to you.
There is a skillset and education required to deploy and even use a cloudtop, which not everyone has, such as how to SSH to a remote server. You'll need to be at least be familiar with your cloud, along with a number of other tools (e.g., docker, linux, etc.) and how those tools integrate with your chosen toolkit. Again, not always a given, especially for some of the more junior peers that you might work with.
How to Make a Cloudtop?
There are a many different ways to make a cloudtop for yourself, but here are two steps I'd propose:
1) Deploy an EC2 server on AWS
2) Set up a Docker dev container
Step #1 - Deploy an EC2 Server on AWS
[I'll come back here later and will add a segment on how to deploy the necessary infrastructure for a Cloudtop, either via the AWS CDK or AWS console]
Step #2 - Set Up a Docker Dev Container
To set up a dev container, all you need is (1) VS Code on your local machine for ease-of-use, and (2) a devcontainer.json file and a DockerFile file saved onto your remote server under a .devcontainer/ directory. Here are some examples of files I've used in the past for setting up a personal cloudtop for me to operate from my Ipad:
devcontainer.json file:
DockerFile file:
Step #3 - (Optional) Ansible Configuration Playbook
Ansible configuration management can be incredibly helpful for you if you wish do perform additional and reproducible configurations on our remote server(s).
configure-cloudtop.yaml file:
If you found any of my content helpful, please consider donating
using one of the following options — Anything is appreciated!