- DevOps Pipeline: Jenkins (CI/CD Automation), Docker, GitHub (Webhooks)
- Skills: AWS (Cloud), Terraform (IaC), Flask (Web Framework), Nginx (Network Proxy)
I have deployed and maintained this portfolio web application using cloud services and continuous integration/continuous deployment (CI/CD) automation tools.
With Terraform, I have created and managed infrastructure as code, including VPC, subnets, ALB, and EC2 instances, to manage cloud resources efficiently.
For the REST API architecture, I configured the security group settings (focusing on ingress with TCP) for EC2 and the load balancer. Additionally, the TLS certificate (for CNAME: HTTP [80] -> HTTPS [443]) was essential for securing the application.
Every time Bootstrap files are updated in my GitHub repository, Jenkins automatically detects the changes through Webhooks and executes a script to build the Docker image on EC2, then runs the container based on this image. The EC2 instance serves the web application using this container, with Flask managing the Bootstrap files and Nginx acting as a network proxy to connect the application to my domain via HTTP.
Using the Load Balancer's listeners and Route 53 records, I ensured that the domain could serve the application reliably, with a redirection from HTTP to HTTPS facilitated by the TLS certificate.
The health check for Flask and the Load Balancer was configured at the '/health' logical endpoint to ensure traffic stability while monitoring logs, ensuring proper HTTP traffic.
For a better user experience, I utilised CloudFront (CDN) to fetch static images from an S3 bucket, displaying the "coming soon" image without delay on unprepared web pages.
The Load Balancer logs are stored in S3, and CloudWatch is used to track the number of healthy hosts, enabling me to monitor and manage server status consistently. Additionally, I keep monitoring HTTP status codes in the Nginx access and error logs to ensure the stability of my web application.
With AWS Lambda and API Gateway, I added serverless functionality to this website, following a REST API architecture. I selected three cities where I lived, currently live, and would like to travel again. I used the latitude and longitude of these cities to fetch data from weather API services.
I wrote code in Lambda to retrieve the minimum and maximum temperatures, along with a summary of today's weather from OpenWeatherMap. The URL requests are first checked for a successful response status code before converting to JSON. The JSON parsing and potential errors are handled within the except block to ensure proper error tracking.
To integrate Lambda with API Gateway, I created an HTTP GET method for the final endpoint, allowing the Flask application to call the API Gateway.
By using the API Gateway URL, the Flask application retrieves weather data from the weather API, providing today's weather details based on the API's JSON attributes.
- Currency API: Currently Working...
My aim is to consistently add new functionalities, such as weather API, movie API, and some useful stuff :), while not only hosting the website but also developing and implementing cloud and DevOps skills.