Hi there! My name is German Soto a Software Engineer with experience as a QA analyst. After my journey as a QA I tried to move to a more technical role, which hasn’t happened yet. So I decided to tackle this challenge to polish my AWS skills.
The Challenge
The challenge was created by Forrest Brazeal, it consists of 16 steps(in AWS) and it breaks down to: upload a web portfolio/resume using cloud infrastructure and create a continuous integration/continuous delivery pipeline to update it. On my case, it ended up looking similar to this.
Here is a brief description of what I learned in each step, and the things I struggled with:
1. Get certified
Technically I had already passed this step before starting the challenge since I was already an AWS Certified Cloud Practitioner, But I wasn’t happy with it, so I went for the AWS Certified Developer as a step 1.
Along the way I made some small projects like a flappy bird clone which saved the scores, dabbled with AWS amplify and some small PoC experiments involving AWS cognito(auth service).
It was though, there were lots of services, and each of them had different configurations or looked similar(looking at you SQS, SNS and Secrets Manager/Parameter Store). The cherry on top was that I was taking interviews while preparing for it(which wasn’t that smart). After 1.5 – 2 months, I passed it(failed the interviews though).
2,3,4: HTML + CSS + Static Website
This is where half my effort went. Even though I like design I am really slow in it, and I didn’t want to take the easy route and make it look like a printed resume(I also had some projects btw). Here is when my resume challenge became a portfolio challenge.
That being said, how do I start and how do I want it to look. It took me some hours to decide how it was going to look, but I knew some key points it must had:
it had to show a lot in one go
it had to be responsive to the size of the device
Finally I came across bento box/grids design. And problem solved!(kinda, I struggled a lot thanks to the different sizes of the images)
After finishing the html + css I uploaded this files to an S3 bucket and enabled: public access, static website hosting and CORS.
5 and 6: HTTPS + DNS
This steps summarizes to: distribute your website using cloudfront, with https and using your own domain. Here I used a service which I didn’t practice during the certification: AWS Certificate Manager, and its integration with cloudfront.
Thankfully is a really common scenario to link your domain to your website, so there were lots of resources. I did miss one step while following the docs: didn’t assign the alternate domain names to the cloudfront distribution. But after a brief rest I managed to find where was my mistake.
7-10 Javascript, Database, API, Python
Here I harvested the fruits of my certification’s prep time. One of the projects I did required a backend similar to this ones, so my pitfalls, namely CORS were really fresh and avoided them on these steps.
11 – 15 Tests, IaC, Source Control, CI/CD frontend & backend
I Live For This S***
-Elliot/Mr Robot
This latter section of the challenge was the one I enjoyed the most. Here we recreated the backend using SAM, uploaded the code to Github and used github actions to do the CI/CD pipeline. It was hard because, at least for me everything was new. In theory to pass the developer cert, you must be familiar with CI/CD pipelines. But that is, using AWS pipeline. Not Github’s. Since it is an external provider you have to dabble with permissions, pass down parameters to your pipeline and other kind of integration stuff to get it working. Thankfully Github, AWS and the dev community thought it was a common occurrence, so it was documented how to solve the identity/permissions portion.
After that, since I didn’t had to worry about that, I started crafting the yaml file for my pipeline, which to be honest I was comfortable with, after going through aws sam. Started implementing the tests(took the liberty of using playwright on the front end and pytest for the backend), and it felt really satisfying to test and see each test as passed. Now for the “actions”, I just had to google, implement them, and things just worked…or so I thought.
Almost at the end(the day before writing this entry). My build kept failing after changing the endpoint to the API Gateway(had the one made in steps 7-10 instead of the one created using the cloudformation template). After hours of debugging and many failed builds, I decided to test for CORS in the website https://cors-test.codehappy.dev
And CORS was not enabled, my previous api gateway had an integration type of AWS and this new one had the AWS_PROXY type(in which you have to send back the headers), so I added the CORS headers to the lambda code, and it worked.
Now with the CORS issue solved, my counter was populated which made the test pass, and the build succeed!
16 This Post 😉
Here are the links to my portfolio and the code:
https://germansp.com
https://github.com/an3wworldfool/crc-frontend
https://github.com/an3wworldfool/crc-backend