/challenge

Primary LanguageHCL

Scenario - Create and deploy a web service end-to-end

The Challenge

Create an internet-facing web service accepting a number of digits and displaying all possible
combinations back to the user.

Example input: `123` would give as response:

```
123
213
312
132
231
321
```

Guidelines

1. There is no restriction to the resources/documentation you use to accomplish the task.
2. Base the simple web application on a language you are most familiar with to accomplish the above
   challenge.
3. Include a mechanism for deploying the solution to a platform of your choice.
4. The solution must be developed and stored using a source control system -- The codebase will
   need to be made available to us for review ahead of the technical assessment.
5. Be able to outline your design, the steps you took for implementation, and demonstrate the 
   solution is complete and correct during a follow-up hands-on discussion.
6. Confirm that the solution is secured appropriately as a public facing service.
7. The choice of tooling is entirely yours -- there are plenty of services out there that offer
   free “no credit card required” accounts — some examples include (but not limited to): Linode, 
   Digital Ocean, Azure DevOps, GitHub Actions, CircleCI, etc.
8. While it’s up to you as to the amount of time you choose to spend on it, to be fair to you as a 
   candidate, please limit your expected level of investment -- perfection is not an expectation.

=============
Solution:

I put together a quick python function in a lambda that generates the complete set of all input characters.
This is put into a lambda function, with API Gateway in front, on AWS.

To automate publishing and setup, I've used terraform.

One should be able to run 'terraform apply' from this directory to have it setup.
Take the output invoke_url, and add it into the following to test:

curl -X POST -H "Content-Type: application/json" \
	-d '{"letters": "abcdef"}' \
	<INVOKE URL>/serverless_lambda_stage/permutate

With the lambda defaults, 128mb mem, 3sec execution, we hit both timeouts and memory constraints when we go above 6 characters in the input set.
Beyond that, we also exceed maximum output size.   So if sets greater than six characters were routinely going to be accessed, I would account for that
with adjusted limits, and further testing.