Team Cloud Insiders Present Their Project

Northcoders LMS deployment - learning with AWS

The project involved the deployment of both the frontend and backend applications, along with supporting services such as a container registry, Kubernetes cluster, and a relational database. The primary objective of this project was to deploy the learner management system and its supporting services to AWS cloud. The team aimed to leverage DevOps principles, automate CI/CD pipelines, and create a robust and scalable infrastructure.

Cloud insiders Demo Vid

Cloud insiders Demo Vid

Team Cloud Insiders

Manal AbdulqawiPreview: Manal Abdulqawi

Manal Abdulqawi

Carmela ReyPreview: Carmela Rey

Carmela Rey

Tom WroePreview: Tom Wroe

Tom Wroe

Louis FifieldPreview: Louis Fifield

Louis Fifield

Tech Stack

We used AWS (Amazon Web Services) Terraform for Infrastructure as Code (IaC) Kubernetes (EKS - Elastic Kubernetes Service) Docker for containerization CircleCI for continuous integration and continuous deployment (CI/CD) ArgoCD for GitOps-based application deployment Prometheus and Grafana for monitoring and metrics.

Infrastructure Overview
AWS Services Utilised
Amazon Elastic Container Registry (ECR): Used for container image storage.
Elastic Kubernetes Service (EKS): Managed Kubernetes cluster for container orchestration.
Amazon RDS (Relational Database Service): A managed PostgreSQL database used by the backend.

Infrastructure as Code (Terraform)
We used Terraform to provision and manage the AWS infrastructure. The IaC scripts are organized into modules and include:

VPC: Virtual Private Cloud with both public and private subnets.
EKS Cluster: Kubernetes cluster with node groups.
Security Groups: Network security rules for resources.
RDS Instance: PostgreSQL database with encryption.
Load Balancers: For frontend and backend services.
IAM Roles and Policies: For access control.
CI CD
CircleCI: We set up automated CI/CD pipelines for both frontend and backend repositories on GitHub. These pipelines build, test, and deploy the applications.
GitOps with ArgoCD

ArgoCD: We adopted a GitOps approach to application deployment using ArgoCD. Our Kubernetes manifests are stored in Git repositories, and ArgoCD ensures that the clusters reflect the desired state.

Monitoring and Metrics
Prometheus and Grafana: We implemented monitoring and metrics using Prometheus for data collection and Grafana for visualizing metrics through dashboards.

Some challenges we faced:
Setting up the postgres database in local cluster to meet the MVP
Connecting RDS to the project
Jenkins
Prometheus, Service Monitor. Solved with the path
Connecting to Argo and grafana- we used a load balancer for this project so that multiple people could access them. This is insecure as it means they are publicly exposed. Would have liked to set up a secure way of accessing them remotely such as OAuth. Ingress etc.
We had to increase the number of nodes in our EKS cluster.

Things we would like to do:
Adding more prometheus metrics
Set up ingress for frontend and backend
Using jenkins for CI/CD - we managed to get jenkins deployed on EKS and we created a jenkins file for the frontend

Tech StackPreview: Tech Stack