The Cloud Resume Challenge is a hands-on project designed to help you bridge the gap from cloud certification to cloud job. It incorporates many of the skills that real cloud and DevOps engineers use in their daily work.
Here are the steps required to complete the challenge:
I have not completed the AZ-900 certification as I am going straight for the AZ-104 Certified Administrator certification. I'm hoping to complete this is November 2024.
I have created my resume using HTML.
I have not used any CSS frameworks, just plain CSS.
My HTML resume has been deployed online as an Azure Storage static website.
I have used Azure Content Delivery Network (CDN) to use HTTPS for the Azure Storage URL. The new version of Azure CDN is Azure Front Door, which has more features, but Microsoft charge a monthly fee for this so I chose Azure CDN.
I have pointed a custom DNS domain name to the Azure CDN endpoint. I purchased the cloudresumechallenge.site domain name from Namecheap.
I created a visitor counter using JavaScript. This started off quite simple but then I added error handling and some logging as I was having problems connecting this to the API.
The visitor counter needs to retrieve and update its count in a database. I used the NoSQL API of Azure’s CosmosDB for this. Azure offers a free tier but only one instance per account, so the existing instance needs to be deleted before deploying a new one.
I used an API instead of communicating directly with CosmosDB from the Javascript code. The API accepts requests from the JavaScript in web app and communicates with the database. I used Azure Functions with an HTTP trigger.
I used Python to write the function code. Having done some Python courses and worked on Python projects before, this wasn't too difficult. Having said that, I really struggled to connect to the database. I then switched from a Table database to a NoSQL database and connecting became much easier. I find the documentation for Azure difficult to follow as it doe nt seem to flow in a logical order for creating real-world apps.
I have started to write tests for the Python code but need to finish these. I have written tests for JavaScript code before so I understand the principles of testing. I just need to learn the syntax here.
I have configured the Azure resources using infrastructure as code (IaC). I exported the ARM templates directly from the Azure Portal then decompiled them into Bicep. I then modified a template I had created on a previous project. This template uses parameters for everything it can, so that only the parameters file needs to be modified to deploy a new version of the project. I will create more IaC using Terraform and then Pulumi later.
I created a GitHub repository for all my code for this project.
I created continuous integration and deployment (CI/CD) pipelines using GitHub Actions so that when I push an update to the Python code, the Python tests get run. If the tests pass, the Python code is automatically deployed to the Azure function. This part was very easy as a GitHub actions template for this purpose already exists on the GitHub webpage.
I created continuous integration and deployment (CI/CD) pipelines using GitHub Actions so that when I push an update to the web app code, it is automatically deployed to the Azure function. This part was more difficult than the back end CI/CD pipeline and I still need to fix a problem with connecting to the container.
I will write a blog on the challenge and post it on my own website. For now, I have posted a copy of this readme.
-
Run the following command to deploy the Bicep IaC to your Azure Subscription:
az deployment sub create --location uksouth --template-file infrastructure/Bicep/main.bicep --parameters infrastructure/Bicep/main.bicepparam
-
Run the following to enable static website hosting on the
$web
container:az storage blob service-properties update --account-name <storage_account_name> --static-website --404-document 404.html --index-document index.html
-
Use the following command to copy the website files to the
$web
container:az storage blob upload-batch --account-name <storage_account_name> --account-key $(az storage account keys list -n <storage_account_name> -g rg-cloud-resume-challenge --query '[0].value' -o tsv) --destination '$web' --source src --pattern "*" --overwrite true
-
Use the VSCode Azure Extension to deploy the function.
-
Set up the custom domain name.