This blog post is about The Cloud Resume Challenge. After reviewing the challenge, I knew I'd want to make a few changes.
- Built the frontend in React.
- Used JavaScript for the frontend and the Function App. Sticking to a single language made things easier.
- Switched to Static Web Apps instead of using the Static Web App feature for Storage Accounts.
- Didn’t create any unit tests as it was beyond my goals.
With that out of the way, here is how everything was setup.
- Bought a domain from Namecheap. This was a straight forward process and it cost $18 for the domain. I've used Namecheap in the past and that's why I went with them instead of Cloudflare, Azure DNS and etc.
- Created an Azure tenant:
- Verified the domain
- Set up backup admin accounts
- Enabled MFA and tested the backup accounts
- Created a subscription with a $50 budget to control costs
- Created an Azure DevOps organization.
-
Set up my local build environment:
Created the Static Web App.
Built the frontend and made the first commit.
Spent a lot of time troubleshooting Static Web App deployment issues. I didn't record the issues I went through so I can't go into detail about them.
Set up a Cosmos DB account and table. I took advantage of the free tier to keep costs down.
- Built the Function App. This took a while to figure out as I'd never used this product before. After a few hours I could deploy to Azure and was able to send GET and POST requests.
- Microsoft takes a week to approve free hosted agents and waiting a week would hold me back. Therfore I switched to a self-hosted build agent.
- Built the pipeline for the Static Web App. Initially I used the YAML template as an example but the final stage wouldn't work, building was fine but deploying to Azure lead to random errors and timeouts. In the end I switched to using the SWA CLI.
- Built the pipeline for the Function App. This took less time then building the Static Web App pipeline.
- I went for seperate pipelines so I can build and deploy independently. Folder based triggers were used to only run the pipelines when relevant changes are detected.
- After a few days, I checked the costs and realised the Function App was too expensive. I switched from a Flexible Consumption Plan to a Consumption Plan.
- Security was always on my mind. I followed best practices but I knew I’d miss something. I researched security tools for SCA, SAST, DAST, Azure config scanning, and IAST. I ended up using Aikido. They offer a free plan and covered everything except IAST.
- Finally, the part I dreaded, redoing my resume and making a nice looking website. You can check it out at https://amanielgobezy.com/.
I've added two diagrams to give an overview of the entire setup.
- Diagram created using Azure Diagrams:
- Diagram created using Eraser:
Thanks for reading this blog post. Continue onto Part 2 where I go over the issues I haven't resolved and what I left out to save time.
Top comments (0)