The job market is more demanding these days. And when it comes to finding a job in tech, it’s no longer enough to showcase your skills on your CV. Recruiters will look not only at your LinkedIn, but also at your GitHub and personal website.
Where once a Senior Engineering Manager didn’t need to demonstrate day-to-day hands-on experience, now it has become almost a must-have.
So, I needed something that could give me more exposure to the hands-on topics essential to DevOps, Cloud, and Platform Engineering. The Cloud Resume Challenge is perfect for testing those skills.
The challenge is officially made up of 16 steps, and there are three versions. One for each of the most popular cloud providers: AWS, Azure, and GCP. If you want to learn more about the challenge and explore other success stories, be sure to visit the official website.
This is the first post in a collection I’m writing to share what I’ve learned to build a cloud resume on AWS.
1. HTML website
As with this website, I chose Astro because it’s a lightweight and fast framework. After trying more complex options like GatsbyJS and Next.js, I appreciated its shallow learning curve and how quickly I could get a working product online.
2. CloudFront and S3
Create an S3 bucket
In the S3 console, click Create bucket.
Choose your preferred region and give the bucket a unique name.
Make sure to:
- Keep ACLs disabled
- Block all public access
- Optionally enable versioning
- Disable Static website hosting because CloudFront will handle content delivery
Lastly, tag the bucket with the key-value pair (project, Cloud Resume Challenge)
.
Setup CloudFront
CloudFront works through distributions, so create a new one by selecting Single website or app.
Choose Amazon S3 as the origin and select the bucket hosting your website. Leave the Origin path empty unless your index.html
is not in the root folder.
After selecting Do not enable security protections, click Create distribution.
It may take a few minutes to deploy. While it’s being created, update a couple of settings:
- In General, set Default root object to
index.html
- In Behaviors, set Viewer protocol policy to Redirect HTTP to HTTPS
This ensures your site serves the correct file and forces secure connections.
Fix subfolder access
If your website is made up of subfolders that turn into URLs like /about/
, /blog/
, etc., you may come across an Access Denied error.
Since we’re not using the S3 static website endpoint, they will not be identified as valid objects.
This can be solved by implementing a simple CloudFront Function that appends index.html
where necessary:
function handler(event) {
var request = event.request;
var uri = request.uri;
if (uri.endsWith("/")) {
request.uri += "index.html";
} else if (!uri.includes(".")) {
request.uri += "/index.html";
}
return request;
}
3. Domain and SSL integration with CloudFront
Buy a domain
I used GoDaddy to buy giorgiodg.cloud at a very cheap price. In retrospect, I may have used another service because of reasons you will discover soon.
Create a new certificate
Go to Certificate Manager (ACM) and request a certificate. Just make sure you’re in the us-east-1 (N. Virginia) region.
Use an asterisk to request a wildcard certificate to protect several sites in the same domain — in my case, it was *.giorgiodg.cloud
.
Leave the default settings, and tag it as usual. The newly created certificate will show as Pending validation.
Now, head over to GoDaddy and go to My Products → DNS → Manage DNS.
Here, you’ll add two CNAME records:
-
The first will point to your CloudFront distribution:
- Type:
CNAME
- Name:
www
- Value: your CloudFront distribution name
Note: if there’s already a record for
www
, edit its value instead of creating a new one — otherwise, you might get an error. - Type:
-
The second will point to the AWS Certificate Manager (ACM) validation server:
- Type:
CNAME
- Name: use the CNAME name in the ACM certificate
- Value: use the CNAME value in the ACM certificate
Note: if the CNAME name is
_c3e2d7eaf1e656b73f46cd6980fdc0e.example.com
, enter only_c3e2d7eaf1e656b73f46cd6980fdc0e
. - Type:
Once the certificate status changes to Issued, head over to the CloudFront console.
Select your distribution, and in the General section:
- Add your domain name under Alternate domain name (CNAME)
- Select the new certificate under Custom SSL certificate
- Save your changes and wait for deployment to complete
Note about GoDaddy
GoDaddy doesn’t support CNAME records for APEX (root) domains by default. Luckily, there’s a workaround.
In my case, I went to the Forwarding section in GoDaddy and added this rule:
- Domain:
giorgiodg.cloud
- Destination:
https://www.giorgiodg.cloud
- Type: Permanent (301) redirect
That’s why I said earlier that I might have preferred using Route 53.
With the domain and SSL in place, the foundation was ready.
It was exciting to navigate to giorgiodg.cloud and see the website live!
In the next post, I’ll continue with backend integration to make the website dynamic.