It is a fun way to assess your cloud skills. It is also a good representative sample of the work we do at Rearc. We've built the Quest webapp with Node.js and golang. Your job, should you wish to accept it, is to complete a series of tasks to make it run in the cloud.
- Public cloud: AWS, GCP, Azure.
- More than one cloud is a "good to have" but one is a "must have".
- General cloud concepts, especially networking.
- Containerization, such as: Docker, containerd, Kubernetes.
- IaC (Infrastructure as code). At least some Terraform preferred.
- Linux (or other POSIX OS).
- VCS (Version Control System). Git is highly preferred.
- TLS is a plus.
You may do all or some of the following tasks. Please read over the complete list before starting.
- If you know how to use git, start a git repository (local-only is acceptable) using the webapp files included in this repo as a starting point. Commit all of your work to it.
- Use Infrastructure as Code (IaC) to deploy the code as specified below.
- Terraform is ideal, but use whatever you know, e.g. CloudFormation, CDK, Deployment Manager, etc.
- Deploy the app in a container in any public cloud using the services you think best solve this problem.
- Use
nodeas the base image. Node.js 18 or later is required (any active LTS release works). - Install the dependencies with
npm installornpm ci.
- Use
- Navigate to the index page to obtain the SECRET_WORD.
- The secret word changes periodically. If the secret word check says your word is no longer current, set
SECRET_WORDto the word the index page shows now.
- The secret word changes periodically. If the secret word check says your word is no longer current, set
- Inject an environment variable (
SECRET_WORD) in the container using the value on the index page. - Deploy a load balancer in front of the app.
- Add TLS (https). You may use locally-generated certs.
Each stage can be tested as follows (where <ip_or_host> is the location where the app is deployed):
- Public cloud & index page (contains the secret word) -
http(s)://<ip_or_host>[:port]/ - Docker check -
http(s)://<ip_or_host>[:port]/docker - Secret Word check -
http(s)://<ip_or_host>[:port]/secret_word - Load Balancer check -
http(s)://<ip_or_host>[:port]/loadbalanced - TLS check -
http(s)://<ip_or_host>[:port]/tls
A few notes on the checks:
- Public cloud (1): AWS, GCP, and Azure are recognized. If you use another cloud, or your platform isn't detected, let us know what you are using and we can provide you with a secret word.
- Docker check (2): despite the name, this check recognizes many other container runtimes and platforms.
- Secret Word check (3): checks that
SECRET_WORDholds a recent secret word. - TLS check (5): checks for upstream TLS termination.
You may do whichever, and however many, of the tasks above as you'd like. We suspect that once you start, you won't be able to stop. It's addictive. Extra credit if you are able to submit working entries for more than one cloud provider.
- Your work assets, as one or both of the following:
- A link to a hosted git repository.
- A compressed file containing your project directory (zip, tgz, etc). Include the
.gitsub-directory if you used git.
- Proof of completion, as one or both of the following:
- Link(s) to hosted public cloud deployment(s).
- One or more screenshots showing, at least, the index page of the final deployment in one or more public cloud(s) you have chosen.
- An answer to the prompt: "Given more time, I would improve..."
- Discuss any shortcomings/immaturities in your solution and the reasons behind them (lack of time is a perfectly fine reason!)
- This may carry as much weight as the code itself.
Your work assets should include:
- IaC files, if you completed that task.
- One or more Dockerfiles, if you completed that task.
- A sensible README or other file(s) that contain instructions, notes, or other written documentation to help us review and assess your submission.
- Please include the quest version (from
package.json, currently1.3.0) that you used for your submission. - Note - the more this looks like a finished solution to deliver to a customer, the better.
- Please include the quest version (from
You don't have to at all if you don't want to. You can run it in public cloud(s), grab a screenshot, then tear it all down to avoid costs.
If you want to host it longer for us to view it, we recommend taking a screenshot anyway and sending that along with the link. Then you can tear down the quest whenever you want and we'll still have the screenshot. We recommend waiting no longer than one week after sending us the link before tearing it down.
We have many more for you to solve as a member of the Rearc team!
Awesome! Tell us you found a bug or that the quest can't detect a task you've solved when you submit your quest and we'll talk more!
There is no fail. Complete whatever you can and then submit your work. Doing everything in the quest is not a guarantee that you will "pass" the quest, just like not doing something is not a guarantee you will "fail" the quest.
No. After interviewing, please change any solutions shared publicly to be private.
No. There are many possible solutions to this quest that would be zero cost to you when using AWS, GCP, or Azure.
The Go binaries in bin/ are closed source because they check your solution. They need no credentials, cloud permissions, or outbound internet access, and they write nothing outside the container. Run them the way you would run any untrusted third-party workload:
- Use a sandbox or free-tier account (or project or subscription) with nothing else in it, and set a budget alert.
- Give the container no IAM role, service account, or managed identity, and no access to secrets (
SECRET_WORDcan be in the environment, it is not security sensitive). - Run it as a non-root user with a read-only root filesystem and all Linux capabilities dropped.
- Expose only the container's HTTP port 3000. You can block all network egress.
- You can stop the service or even tear everything down once you have your screenshot.
None of this affects the checks, and a locked-down deployment is a good thing to show in your submission.
You may use AI as a reference tool but there will be a strong expectation to exhibit the same expertise and understanding from your submission in your interview. In addition we encourage you to be open about any usage! Please document what you used, what your prompts were, how it helped, what it got wrong, etc.