Cloud Resume Challenge
Tags: aws, cloudresumechallenge, cloudskills
Published: 2021-03-28 03:15:48

## About me !

Hello Everyone, I'm recent grad student with diverse background from hardware design to software development. Since past one year i have been working on cloud, and it has been an amazing experience building projects on AWS platform and achieving AWS certifications in cloud practitioner and Solution Architect Associate. I have been referred by my friend about the cloud resume challenge and i must say it has been an intriguing experience and a great learning curve in my exploration in cloud. I'm currently looking for full time opportunities in cloud as a cloud developer/engineer or DevOps Engineer. 

When comes to the challenge, i would describe the learning curve i went through while completing each individual task. 

1. HTML, CSS, javascript
2. S3 static website hosting
3. Enabling Cloud Front and DNS configuration
4. Lambda fronted by API gateway and DynamoDB configuration
5. Infrastructure as Code- CloudFormation
6. Source Control (GitHub) and CI/CD front & backend (Github Actions)

I aware that i have changed the flow as bit, compared to as mentioned in the challenge because of my previous experience in developing application has influenced the flow.

##1. HTML, CSS, Javascript Design

Since i am not a heavy frontend developer, i took the approach of using a free template that was available online, which made the time i consumed in developing the frontend less and easier, while making the website look beautiful in different screen sizes from phone to computer. Having the knowledge of future tasks, i have implemented an count.js file and connected it to the main website which is currently left blank.

##2. S3 static website hosting

This was my first time configuring the S3 bucket as a static website hosting where i have learned some interesting insights like the bucket name should be the same as the domain name that we would be using for hosting the website. During the exploration i have uploaded my resume and tried to access the website using object url available once the files are uploaded, of-course i was denied access to the files since it was not public, so temporarily i have changed the access to files to public for test run.

##3. enabling Cloud Front and DNS configuration

Having studied about cloud-front and Origin access Identity this was a good experience configuring it for my bucket in s3, with some time spent going through the configuration parameters i was able to implement successfully integrate the cloud-front in-front of s3 and immediately started noticing a global icon on my resume website and also being encrypted in transit HTTPS. One problem i faced with cloud-front is handling invalidators. Every time i update my resume on S3, i don't see the updated version on cloud-front apparently due to cloud-front caching where i had the opportunity to explore invalidators and be cautious to invalidate the cache every-time i make an update.

When comes to DNS configuration, i have bought a custom domain name called ramgopalsrikark.online from go-daddy where i have changed the NS (Name Server) records to the ones i found on AWS route 53, so the traffic to godaddy is redirected to AWS route 53. To connect to my cloudfront i have added a A record to cloudfront.

##4. Lambda fronted by API gateway and DynamoDB configuration
 
From my previous project experience, i have been working with lambda and dynamoDB hence, it didn't consume much time working with on it. Comparatively it was my first time working with API gateway, i had fun experimenting with REST API design where i have used GET method along with Lambda proxy to get the response. One interesting insight that i have observed while configuring the API gateway was that if we configure the API gateway to lambda proxy then the body of the JSON response from lambda must be a string, comparatively if we dont mention lambda proxy u can output a json or any data format of choice in body. After integration with backend serverless architecture the api was working and returning the values, but when i integrate with the code in count.js i was getting an error as access denied, where i got to learn about CORS (Cross Origin Resource Sharing)  and have enabled it to remove the problem i encountered.

## 5. Infrastructure as Code- CloudFormation

CloudFormation was a completely new technology, where i have no experience so i had to spent 2 days learning about the basics of cloud formation template and how to write code in yaml. Encountered few problems specially while configuring API gateway, but it was informative and would love to explore the technology in detail soon.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n003gjrtfxd7jbq0esjz.png)

Once completing the yaml file, i used the designer console to view the above diagram. 

##6. Source Control (GitHub) and CI/CD front & backend (Github Actions)

Probably the most exciting part of the project was working with Github and Github actions for source control & CI/CD integration. Configuring the workflow main.yml file to automate the deployement of frontend and backend file was the fun part, the only regret i had when i was working with these tools was if i had known earlier about this, the whole process would be much easier to develop. Anyways, i would use these skills in my future deployments of projects i would be working on.

Hence on the whole, it was a great learning curve working on [the cloud resume challenge](https://cloudresumechallenge.dev/instructions/), the [front-end code] (https://github.com/RamGopalSrikar/portfolio-website) and the [Backend-end code] (https://github.com/RamGopalSrikar/portfolio-website-backened) is available on github. The finished webpage is [portfolio website](https://ramgopalsrikark.online), feel free to give your opinion on the website.