Cloud hosting for nursing online
If you want to provide e-health services for your patients, you're going to need a server to host your work. Let's chat about what, how and where?
First off, if you want to read about exciting applications of cloud hosted technology, feel free to jump straight to the "So what?" section below, where I explain why you want to learn this area yourself. I think it highlights the importance of digital literacy in nursing when we have some examples of the unrealised potential!
Why run the nurseAdvance server myself?
This website is a bit of an adventure for me in a number of ways. There are technical skills I need to put ideas into practice and each of those come one step at a time. Which means while I used to host my website with a one-click WordPress service, if I want to get my hands dirty creating novel ehealth applications, I need to learn to go beyond that, managing my own technical infrastructure on the backend. At least the basics – this is a deep rabbit hole.
Now, while a lot of tech I talk about is genuinely not challenging to learn (like automating tasks with Python) honestly, running my own server has involved a lot of swearing. And a lot of googling why something didn't work. Then more swearing.
That's because I've done it the hard way. nurseAdvance is hosted on Amazon Web Services (AWS), which splits out each element of hosting into a separate component and service, so that each one is exactly scalable to your needs. Makes sense, right? But the names are cryptic and a lot of time was spent reading about EC2, S3, RDS, IAM, EBS... no, it doesn't make any more sense if you expand the abbreviations! It makes for more things to misconfigure too.
If you're looking to do this yourself I strongly recommend starting with one simple VPS (Virtual Private Server) to play with first. Amazon have created this basic service in Lightsail for $5pm. Not bad but you can also get ten months of Digital Ocean's services through the GitHub Student Dev Pack for free. Digital Ocean are the service Amazon created Lightsail to compete with, they serve exactly our nursing needs of smaller service experiments, so check them out.
I'll get more into the reasons why I chose to use Amazon Web Services, despite being more difficult. For now just know that AWS has a huge ecosystem of innovative products you'll want to take advantage of. Also it's essentially free for a year, after which you can hop over to a new account for another year, until you outgrow the free trial service. I'll give you an outline of the journey I went on; if it seems complicated, remember I'm going to explain why it's worth it!
What's involved to get started?
Sign up for AWS here. Open the documentation, you're going to need it, especially the "getting started" sections. Also now is a good time to mention Digital Ocean's amazing tutorials, without which I would have been so very stuck. This plus some serious google-fu will be your lifeline when things don't work. And lots of tea... best stick the kettle on.
You need to visit IAM (Identity and Access Management) first. Reason being the account you signed up with is your "root" account with the highest level priveleges. This is a security risk, if this account is breached it's game over, so you create further users through IAM with more restricted access. Follow the tutorial to create an admin account (along with its authentication key and secret) then log in to that account instead whenever possible.
Next up you need to launch a server through EC2 (Elastic Compute Cloud). This is the component that determines how powerful your service will be, how much processing it can do. Amazon have a repository of machine images to pick from, which I'll save you the effort, just choose the most recent Ubuntu Server LTS release. Ubuntu is a flavour of Linux, free and very widely used. There's a great reason to choose this: there is not a single question that you cannot google an answer to. That's how popular it is. While EC2 is the compute element, the image will ask for some storage attached, the harddrive essentially, in the form of EBS (Elastic Block Storage). Final stage here is to create a public/private key pair for SSH access. SSH is a secure way to encrypt access to a server, mostly by a command line (I use Windows Subsystem for Linux) but it's nice to have a windowed explorer like WinSCP. With SSH you can dial into your server, set up and deploy your application (e.g. Django, Gunicorn and nginx).
Now you probably want a database, which is handled through RDS (Relational Database Service). This is very similar to EC2 and many people skip using RDS to just put their database on EC2 machines instead (RDS is more expensive). But that misses out on two things. One is that the free trial for AWS includes an RDS instance. The other is that it automagically backs itself up in case of data loss. Might as well, eh? You can always migrate the database to EC2 later.
AWS dynamically assigns a public IP address to your EC2 server, which means you're going to want to set up ElasticIP to give it a more permanent address. Nearly there, just need to set up DNS servers to point to this ElasticIP so that the internet at large can find it. Amazon have a solution for this called Route 53, which I used for all of five minutes before switching over to Cloudflare's incredible free CDN service, which makes nurseAdvance fast and highly available. Either way, you just need to point your domain name registrar to the right DNS nameservers.
Alright that's it for the basics, if you've got an application ready to deploy (mine was this blog), you should be up and running after a bit of fiddling with the security permissions. You'll probably want to tweak further, setting up an SSL certificate with Let's Encrypt and maybe hosting static files on S3 storage.
Going through this means we're now familiar with the AWS platform, so we can create future nursing services, huzzah!
So what?
Okay, fair question. AWS is a horrendously complicated way to do something simple like put a blog online. What did I get out of it?
When I go to learn new skills I tend to have a project in mind that I can't do yet, but I can see what the steps in between might be. Step one here was learning how to use Ubuntu on the back end of a service, to launch and maintain a server hosting my work, securely. Healthcare data must be properly handled for nurses to meet their duties under the Code, under the Data Protection Act and to meet ethics approval for research information governance. Running your own server allows you to provide assurance about what data is held, where it's held and who has access. That's as true for international cancer studies as it's true for the smallest of online support groups a nurse might host. You cannot responsibly do that on a platform like Facebook (more on that another time). And when 20% of NHS trusts incompetently exposed themselves to the WannaCry malware, running your own hardware starts to look quite appealing. It also means you can guarantee you log as little data as possible, for example when you want to run an anonymous first contact point for whistleblowing or domestic abuse.
This isn't a hypothetical suggestion either, I've already put this knowledge into practice with a research project I've assisted on, my mix of legal and technical knowledge helping me contribute to planning data entry and storage.
I could've got this far with any VPS service though, so why the added complication of AWS? One great advantage of cloud hosting is you have all the compute power you need, on demand. To go back to my project ideas, the reason I might need to spin up a large compute cluster is exploring how nursing can use machine learning and neural networks, particularly for the nurse rostering problem. Training a neural network takes significant compute resources, but afterwards you can simply turn the compute cluster off again, you stop paying and Amazon releases their hardware for the next person. Another area needing lots of compute power I want to explore is photogrammetry, the process of taking hundreds of photos to recreate a 3d model of a scene, which has huge potential for digital reminiscence in dementia and VR clinical simulation.
Beyond hosting web apps and provisioning compute resources, AWS is atomic, with solutions in all sorts of useful areas:-
- Speech-to-text and text-to-speech – enabling disability access in physical and online spaces, using the same tech powering Amazon's Alexa
- High-performance storage – for research on big data
- Email and texting at scale, with impact analytics – e.g. messaging for local public health services, like cardiac rehab or smoking cessation
- Pre-built images for machine learning including a TensorFlow quickstart
- A computer vision API for image classification – e.g. flag up nurse posts on social media for inappropriate content
- Serverless code execution – great for web scraping and other scheduled automation tasks
- Automated data security scanning – to assure you don't have health data in leaky S3 buckets
Plus more. That's just Amazon; IBM, Microsoft, Google and others all have their own cloud services with different advantages and opportunities.
I believe that none of this potential will be put to the best use for nursing unless it's actual nurses that are involved in delivering it. It's not good enough to commission something from a developer and hope it turns out how you wanted, because that means you're limiting how reactive you are to evolving demands and service-user feedback. Our expert nursing knowledge and intuition will be too far removed from design and delivery if we can't get more involved.
I'll keep saying it, they teach five-year-olds how to code at school now. So when that generation of nurses come to us, it'll be sad if they find we spent the intervening time sitting on our hands doing nothing with all this technology we could be improving people's lives with. While I'm still a few steps away from delivering on that myself, I hope I've done a little to explain why it's important and that you'll consider joining me on that journey!