Cloud hosting: Support for hosting your websites on AWS or similar cloud services.

Overview:

As networked technologies evolve, there has been increasing focus on cloud-based architectures where all or part of the compute resources needed by a piece of software are hosted in the cloud.

The most common examples of this are web applications, which are basically dynamic HTML-driven interfaces that are hosted on a cloud server. The cloud server not only ensures very high reliability, scalability, and accessibility for the application, but also provides for any back-end pieces that the web app needs, e.g., database servers, high-performance compute instances, etc.

Another area in which cloud-based architectures are commonly integrated is as the backend for mobile applications. Mobile applications often have to store a lot of data and, more importantly, may need a *common* datastore that essentially binds together all instances of the mobile application. A simple example is a mobile app for personal password management: it provides secure archive of your passwords and an easy secure interface to it. You'd want that database of passwords to reflect automatically across *all* of your mobile devices...as well as, perhaps, a desktop interface. The best way to do this is by having shared data live on a cloud-based backend that is securely accessed by all clients.

In many cases, product architectures actually do both: they have a cloud-based core for all data storage and manipulation and have *both* a web app and mobile app as two possible interfaces to the system. This hybrid webapp+mobile app architecture is exemplified by many popular networked software products such as Facebook, Amazon, internet banking systems, and many more.

In short, cloud-based architectures are a major feature in the future of computing. So what if your Capstone project is one that requires such an architecture?

CS Dept. Support for hosting DURING development

So your project needs to create/support cloud-based resources (web hosting, compute power, storage, etc.); what are the options? What you are looking for is something that is easy to set up; easy for you to access, administer and maintain during development; and offers a cost-efficient and reliable platform to support your product for your client into the future.

Dev Option 1: Ask the client provide access. The very best option if your client is a private company (i.e. has a computing budget) is to ask the client to provide the server resources. Many companies (big and small) have already moved all of their compute infrastructure into the cloud (e.g., they have an AWS account) and have an IT team that configures and manages those resources. Or, if they don't already have cloud infrastructure, they could agree that it's time to move in that direction and establish service. If they are old school, they can even agree to designate space on an existing physical server in their machine room for you. Either way, your client's IT staff could then create a server (physical or virtual) for your team to use. This is a fantastic option overall because, ultimately, no matter what, the client will need to provide for hosting anyway, i.e., when Capstone ends and you hand over the product. With this approach, it's all taken care of: it's already hosted under their account, you just give them the "keys" (logins, etc.) to the compute instances you've set up and you're good to go!

Dev Option 2: CS Dept support for AWS hosting during the development (Capstone course) phase. Thanks to generous donations by various companies and many CS alumni (note to self: remember to give back when you get rich and famous!), the CS Capstone program now has a small fund that we can use to support Capstone projects. Not a ton...but enough to cover modest hosting costs for projects *during the Capstone year only*. Your team will need to negotiate the details with the CS Dept. Capstone Organizer, but in essence, you could get up to about $30/month to cover the costs of a development server(s) on some for-pay cloud platform like AWS. This is a super option for fast and easy development during the Capstone year, but comes with one major drawback: it's over when you deliver the product and Capstone ends. That means that the only way this is a viable plan is if you have agreement from your client --- early on, *before* you decide to go this route -- to either provide an alternate server to move your product to for long-term hosting, or to take over the AWS (or whatever) account(s) when the project finishes. Otherwise, payment ends, AWS kills your resources, and your product is dead.

To pursue this option, make an appointment in office hours for the CS Capstone Organizer and discuss with him/her. You will need to have done your research on AWS (or your chosen cloud provider) so that you can carefully explain/justify your needs and lay out the predicted costs. We can then work to get the account set up to be paid from CS Capstone/SICCS funds for the duration of the project.

Please Note: NAU-ITS IS NOT A DEV HOSTING OPTION: No Capstone team member should ever contact ITS to ask them to provide hosting. This used to be an option in the past (and some NAU faculty clients may remember that and ask) but it is no longer an option at all. If your client pushes you to ask ITS to give your a hosting option, politely decline, and loop in the Capstone organizer if needed.

Thinking ahead: What happens when Capstone ends? Permanent hosting options...

So you've developed your project on a Capstone-supported AWS server, and are approaching the end of the term and product delivery. Part of product delivery is demonstrating that you product is installed and working on a server or platform of the client's choice. In order to ensure successful product delivery, therefore, you will need to be pro-active to make sure there is a permanent place to move the project. If you have been lucking enough to use Option 1, above, then the product is already on the client's private infrastructure and you're good to go. Otherwise, you'll need to work with your client well in advance of product delivery to arrange for a new home for your product. There are several options to solving this:

Permanent option 1: Client provides hosting. Now that the client is convinced you have a good product, they may be motivated to provide hosting for it, either on a physical machine, or on a cloud compute instance they've rented. You are the tech gurus here; make sure you offer to help your client figure out a way forward. If they choose (highly recommended!) cloud hosting, they will have some small (usually $20-30/month) hosting cost to cover going forward.

Special case option 2: Hosting by NAU ITS. (Only) If the client is an NAU affiliate: if your product is one that has clear and significant benefit to NAU's teaching or research mission, it *might* be possible to ask NAU-ITS to host your product on an NAU server. There are major limitation and conditions here, e.g., there are a number of established ITS policies that must be adhered to, and the site/code/content will need to be vetted by the ITS team.

It's complicated...but really there is just one vital point that you, the Capstone team, need to be aware of:

This is not your problem. You, as a student team, should never contact ITS to ask for a server to be set up. Specifically, your (NAU faculty or affiliate) client must take the lead in contacting ITS to make this request.

ITS can then work through the restrictions and process with your client. If successful, this will end with the client passing you (the team) off to appropriate ITS staff who is in the know and ready to set up your server for you.

Again, finding/negotiating server space is not your problem, but here are a few "helpful pointers" you can remind your client of if he/she is considering NAU-ITS as a final hosting solution for your project:

Again, this can only be an option for clients somehow affiliated with NAU, and there is a process your client must go through with ITS to review/approve this. Remind your client to start this conversation early, *long* before the week you need to deliver the product!

So what should we do?

As you can see, there are a number of options for getting a development server in place for your network-based project. So what to choose? The overall answer is: you have to discuss this with your client. Lay out the options above to your client, emphasizing the pros/cons of each in terms of reliability, convenience, cost, and so on. This will provide a basis for weighing the options and making a strategic and efficient choice.