<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sarath V</title>
    <description>The latest articles on DEV Community by Sarath V (@sarath_v_).</description>
    <link>https://dev.to/sarath_v_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2133052%2Fd93f0625-aba9-4ad5-9a27-7418c728b1de.png</url>
      <title>DEV Community: Sarath V</title>
      <link>https://dev.to/sarath_v_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sarath_v_"/>
    <language>en</language>
    <item>
      <title>From Terraform to GitOps: Building an End-to-End DevOps Platform with 11 Microservices</title>
      <dc:creator>Sarath V</dc:creator>
      <pubDate>Thu, 15 Jan 2026 00:18:22 +0000</pubDate>
      <link>https://dev.to/sarath_v_/from-terraform-to-gitops-building-an-end-to-end-devops-platform-with-11-microservices-4gea</link>
      <guid>https://dev.to/sarath_v_/from-terraform-to-gitops-building-an-end-to-end-devops-platform-with-11-microservices-4gea</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Modern DevOps projects are not just about making things work once — they are about making systems repeatable, debuggable, and reliable.&lt;/p&gt;

&lt;p&gt;While building an end-to-end microservices platform with CI/CD, Kubernetes, ArgoCD, monitoring, and security tools, I first needed a DevOps jumphost: a powerful EC2 instance with all required tooling installed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This article focuses on:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How I provisioned the jumphost using Terraform&lt;br&gt;
Why my initial cloud-init Bash automation failed&lt;br&gt;
How I migrated to Ansible for configuration management&lt;br&gt;
The real errors I faced and how I fixed them&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are building DevOps labs, platforms, or production infrastructure, these lessons will save you days of debugging.&lt;br&gt;
**Architecture Overview (brief)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Terraform provisions:&lt;/strong&gt;**&lt;br&gt;
VPC + Subnets + Security Groups&lt;br&gt;
IAM Role &amp;amp; Instance Profile&lt;br&gt;
EC2 jumphost (Ubuntu)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ansible configures:&lt;/strong&gt;&lt;br&gt;
Docker&lt;br&gt;
Jenkins&lt;br&gt;
Terraform&lt;br&gt;
Ansible&lt;br&gt;
kubectl, eksctl&lt;br&gt;
Helm&lt;br&gt;
Trivy&lt;br&gt;
AWS CLI&lt;br&gt;
Databases &amp;amp; other tooling&lt;br&gt;
Terraform handles infrastructure.&lt;br&gt;
Ansible handles configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus: Monitor Your AWS Cost in Real-Time While Building This Project (Using AWS CostWatch)&lt;/strong&gt;&lt;br&gt;
When you buildin this project your EKS, EC2, ECR, and Jenkins, AWS bills can grow silently. So before you panic after seeing a high bill, you must observe your cost live. That’s why I built AWS CostWatch and I strongly recommend running it locally while doing this project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This works for:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Free Tier users&lt;br&gt;
Paid AWS users&lt;br&gt;
Students &amp;amp; learners&lt;br&gt;
DevOps engineers testing infrastructure&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It runs on your own laptop terminal and keeps monitoring AWS in the background.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Step-by-Step: Run AWS CostWatch on Your Laptop&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You don’t need any server. Just your laptop terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Clone the repository&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone:  https://github.com/vsaraths/AWS-Cost-Watch.git
cd AWS-Cost-Watch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Create a Python virtual environment (recommended)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m venv venv
source venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;**For Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;venv\Scripts\activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Install dependencies&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;or manually:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install boto3 rich sqlite-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Configure AWS credentials&lt;/strong&gt;&lt;br&gt;
Make sure this works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws sts get-caller-identity`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Provide:&lt;/strong&gt;&lt;br&gt;
Access Key&lt;br&gt;
Secret Key&lt;br&gt;
Region&lt;br&gt;
Output format: json&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Run CostWatch&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 aws_cost_dashboard.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Once started:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It instantly scans your AWS account&lt;br&gt;
Displays the green live dashboard&lt;br&gt;
Auto-refreshes every 10 minutes&lt;br&gt;
Saves history to SQLite&lt;br&gt;
Leave this terminal open.&lt;br&gt;
It will keep running in background while you work on Terraform, EKS, Jenkins, etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycupo87h577ktbjgfu29.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycupo87h577ktbjgfu29.jpg" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  So lets start our project
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Clone the Repository&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/vsaraths/&amp;lt;your-repo&amp;gt;.git
cd &amp;lt;your-repo&amp;gt;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Configure AWS Credentials&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Provide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Access Key ID
Secret Access Key
Region (e.g., us-east-1)
Output format: json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Navigate into the Project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls
cd Microservices-E-Commerce-eks-project`
ls`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Create S3 Backend for Terraform&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd s3-buckets
terraform init
terraform apply -auto-approve`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This stores Terraform state remotely and enables safe infra management.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 3.1: Create Network Infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to Terraform EC2 setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ../terraform_main_ec2
terraform init
terraform plan
terraform apply -auto-approve`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sample output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apply complete! Resources: 24 added, 0 changed, 0 destroyed.
jumphost_public_ip = "18.208.229.108"
region = "us-east-1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check Terraform state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform state list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Create the Jumphost EC2 (Terraform + Ansible)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd terraform_main_ec2
terraform init
terraform apply -auto-approve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This EC2 acts as the DevOps control plane:&lt;/strong&gt;&lt;br&gt;
Jenkins&lt;br&gt;
Terraform&lt;br&gt;
kubectl&lt;br&gt;
Ansible&lt;br&gt;
Docker&lt;br&gt;
AWS CLI&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ansible was used to configure all tools instead of shell scripts, making the setup repeatable and idempotent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Connect to EC2 and Access Jenkins&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From AWS Console → EC2 → Connect → Switch to root:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo -i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Verify installed DevOps tools:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git --version
java -version
jenkins --version
terraform -version
mvn -v
kubectl version --client --short
eksctl version
helm version --short
docker --version
trivy --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Get Jenkins admin password:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat /var/lib/jenkins/secrets/initialAdminPassword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;example output :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0c39f23132004d508132ae3e0a7c70e4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 6: Setup Jenkins&lt;/strong&gt;&lt;br&gt;
Open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://&amp;lt;EC2_PUBLIC_IP&amp;gt;:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Paste admin password&lt;/li&gt;
&lt;li&gt;Install suggested plugins&lt;/li&gt;
&lt;li&gt;Create first user (example: admin)&lt;/li&gt;
&lt;li&gt;Click through: Save and Continue → Save and Finish → Start using Jenkins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Install Jenkins Plugins&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard → Manage Jenkins → Plugins.&lt;/li&gt;
&lt;li&gt;Click the Available tab.&lt;/li&gt;
&lt;li&gt;Search and install the following:
✅ Pipeline: stage view&lt;/li&gt;
&lt;li&gt;when installation is compete:
Restart jenkins when installation is complete and no job are running&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Create a Jenkins Pipeline Job (Create EKS Cluster)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.Go to Jenkins Dashboard&lt;br&gt;
2.Click New Item&lt;br&gt;
3.Name it: eks-terraform&lt;br&gt;
4.Select: Pipeline&lt;br&gt;
5.Click OK&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : eks-terraform/eks-jenkinsfile&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;&lt;p&gt;click Build with Parameters&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ACTION :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select Terraform action : apply&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;To verify your EKS cluster, connect to your EC2 jumphost server and run:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws eks --region us-east-1 update-kubeconfig --name project-eks
kubectl get nodes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 9: Create a Jenkins Pipeline Job (Create Elastic Container Registry (ecr))&lt;/strong&gt;&lt;br&gt;
1.Go to Jenkins Dashboard&lt;br&gt;
2.Click New Item&lt;br&gt;
3.Name it: ecr-terraform&lt;br&gt;
4.Select: Pipeline&lt;br&gt;
5.Click OK&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : `&lt;a href="https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git" rel="noopener noreferrer"&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;`Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : ecr-terraform/ecr-jenkinfile&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;&lt;p&gt;click Build with Parameters&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ACTION :&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select Terraform action : apply&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build&lt;br&gt;
To verify your EKS cluster, connect to your EC2 jumphost server and run:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws ecr describe-repositories --region us-east-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;emailservice&lt;/li&gt;
&lt;li&gt;checkoutservice&lt;/li&gt;
&lt;li&gt;recommendationservice&lt;/li&gt;
&lt;li&gt;frontend&lt;/li&gt;
&lt;li&gt;paymentservice&lt;/li&gt;
&lt;li&gt;productcatalogservice&lt;/li&gt;
&lt;li&gt;cartservice&lt;/li&gt;
&lt;li&gt;loadgenerator&lt;/li&gt;
&lt;li&gt;currencyservice&lt;/li&gt;
&lt;li&gt;shippingservice&lt;/li&gt;
&lt;li&gt;adservice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 10: Create a Jenkins Pipeline Job for Build and Push Docker Images to ECR&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;🔐 Step 10.1: Add GitHub PAT to Jenkins Credentials&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.Navigate to Jenkins Dashboard → Manage Jenkins → 2.Credentials → (global) → Global credentials (unrestricted).&lt;br&gt;
3.Click “Add Credentials”.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the form:&lt;/li&gt;
&lt;li&gt;Kind: Secret text&lt;/li&gt;
&lt;li&gt;Secret: ghp_HKMTPOddKYE2LfdLGuytsimfedgdssxnnl5d1f73zh&lt;/li&gt;
&lt;li&gt;ID: my-git-pattoken&lt;/li&gt;
&lt;li&gt;Description: git credentials&lt;/li&gt;
&lt;li&gt;Click “OK” to save.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 10.2: Jenkins Pipeline Setup: Build and Push and update Docker Images to ECR&lt;br&gt;
**&lt;/strong&gt;Step 10.2.1: Jenkins Pipeline Setup: emailservice&lt;br&gt;
**&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: emailservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/emailservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*&lt;em&gt;Step 10.2.2: Jenkins Pipeline Setup: checkoutservice&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: checkoutservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories :&lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */master&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/checkoutservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;Step 10.2.3: Jenkins Pipeline Setup: recommendationservice&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: recommendationservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/recommendationservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 10.2.4: Jenkins Pipeline Setup: frontend&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: frontend&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/frontend&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;*&lt;em&gt;Step 10.2.5: Jenkins Pipeline Setup: paymentservice&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: paymentservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/paymentservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;*&lt;em&gt;Step 10.2.6: Jenkins Pipeline Setup: productcatalogservice&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: productcatalogservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;strong&gt;&lt;a href="https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git" rel="noopener noreferrer"&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/productcatalogservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 10.2.7: Jenkins Pipeline Setup: cartservice&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: cartservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/cartservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 10.2.8: Jenkins Pipeline Setup: loadgenerator&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: loadgenerator&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : `&lt;a href="https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git" rel="noopener noreferrer"&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;`Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/loadgenerator&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 10.2.9: Jenkins Pipeline Setup: currencyservice&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: currencyservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;a href="https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git" rel="noopener noreferrer"&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/currencyservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 10.2.10: Jenkins Pipeline Setup: shippingservice&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: shippingservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;a href="https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git" rel="noopener noreferrer"&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/shippingservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 10.2.11: Jenkins Pipeline Setup: adservice&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Jenkins Dashboard&lt;/li&gt;
&lt;li&gt;Click New Item&lt;/li&gt;
&lt;li&gt;Name it: adservice&lt;/li&gt;
&lt;li&gt;Select: Pipeline&lt;/li&gt;
&lt;li&gt;Click OK&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline:&lt;/li&gt;
&lt;li&gt;Definition : Pipeline script from SCM&lt;/li&gt;
&lt;li&gt;SCM : Git&lt;/li&gt;
&lt;li&gt;Repositories : &lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Branches to build : */main&lt;/li&gt;
&lt;li&gt;Script Path : jenkinsfiles/adservice&lt;/li&gt;
&lt;li&gt;Apply&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;click Build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🖥️ Step 11: Install ArgoCD in Jumphost EC2&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;11.1: Create Namespace for ArgoCD&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create namespace argocd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;11.2: Install ArgoCD in the Created Namespace&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -n argocd \
  -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;11.3: Verify the Installation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ensure all pods are in Running state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -n argocd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;11.4: Validate the Cluster&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check your nodes and create a test pod if necessary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get nodes

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;11.5: List All ArgoCD Resources&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get all -n argocd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sample output:&lt;/p&gt;

&lt;p&gt;NAME                                                    READY   STATUS    RESTARTS   AGE&lt;br&gt;
pod/argocd-application-controller-0                     1/1     Running   0          106m&lt;br&gt;
pod/argocd-applicationset-controller-787bfd9669-4mxq6   1/1     Running   0          106m&lt;br&gt;
pod/argocd-dex-server-bb76f899c-slg7k                   1/1     Running   0          106m&lt;br&gt;
pod/argocd-notifications-controller-5557f7bb5b-84cjr    1/1     Running   0          106m&lt;br&gt;
pod/argocd-redis-b5d6bf5f5-482qq                        1/1     Running   0          106m&lt;br&gt;
pod/argocd-repo-server-56998dcf9c-c75wk                 1/1     Running   0          106m&lt;br&gt;
pod/argocd-server-5985b6cf6f-zzgx8                      1/1     Running   0          106m&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11.6: Expose ArgoCD Server Using LoadBalancer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11.6.1: Edit the ArgoCD Server Service&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl edit svc argocd-server -n argocd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;11.6.2: Change the Service Type&lt;/p&gt;

&lt;p&gt;Find this line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: ClusterIP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: LoadBalancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit (:wq for vi).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11.6.3: Get the External Load Balancer DNS&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get svc argocd-server -n argocd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sample output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME            TYPE           CLUSTER-IP     EXTERNAL-IP                           PORT(S)                          AGE
argocd-server   LoadBalancer   172.20.1.100   a1b2c3d4e5f6.elb.amazonaws.com        80:31234/TCP,443:31356/TCP       2m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;11.6.4: Access the ArgoCD UI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use the DNS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://&amp;lt;EXTERNAL-IP&amp;gt;.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;11.7: 🔐 Get the Initial ArgoCD Admin Password&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get secret argocd-initial-admin-secret -n argocd \
  -o jsonpath="{.data.password}" | base64 -d &amp;amp;&amp;amp; echo
Login Details:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Username: admin&lt;br&gt;
Password: (The output of the above command)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12: Deploying with ArgoCD and Configuring Route 53 (Step-by-Step)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 12.1: Create Namespace in EKS (from Jumphost EC2)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run these commands on your jumphost EC2 server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create namespace dev
kubectl get namespaces
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 12.2: Create New Applicatio with ArgoCD&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the ArgoCD UI in your browser.&lt;/li&gt;
&lt;li&gt;Click + NEW APP.&lt;/li&gt;
&lt;li&gt;Fill in the following:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Application Name: project&lt;/li&gt;
&lt;li&gt;Project Name: default&lt;/li&gt;
&lt;li&gt;Sync Policy: Automatic&lt;/li&gt;
&lt;li&gt;Repository URL:&lt;code&gt;https://github.com/vsaraths/Deploy--E-Commerce-Application-eks-microservices-platform-11-Services-.git&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Revision: HEAD&lt;/li&gt;
&lt;li&gt;Path: kubernetes-files&lt;/li&gt;
&lt;li&gt;Cluster URL: &lt;a href="https://kubernetes.default.svc" rel="noopener noreferrer"&gt;https://kubernetes.default.svc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Namespace: dev&lt;/li&gt;
&lt;li&gt;Click Create.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 17: Create a Jenkins Pipeline Job for Backend and frondend &amp;amp; Route 53 Setup&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enable HTTPS for vsarath.site with AWS Classic Load Balancer (CLB)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This guide explains how to configure HTTPS for your domain aluru.site using AWS Classic Load Balancer (CLB), Route 53, and AWS Certificate Manager (ACM).&lt;/p&gt;

&lt;p&gt;✅ Prerequisites&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A working application (e.g., on EC2 or Kubernetes).&lt;/li&gt;
&lt;li&gt;A registered domain: aluru.site&lt;/li&gt;
&lt;li&gt;Domain is managed in Route 53 as a Public Hosted Zone.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Go to AWS Route 53&lt;/li&gt;
&lt;li&gt;Create a Hosted Zone:&lt;/li&gt;
&lt;li&gt;Domain: aluru.site&lt;/li&gt;
&lt;li&gt;Type: Public Hosted Zone&lt;/li&gt;
&lt;li&gt;Update Hostinger Nameservers:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Paste the 4 NS records from Route 53 into Hostinger:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ns-865.awsdns-84.net&lt;/li&gt;
&lt;li&gt;ns-1995.awsdns-97.co.uk&lt;/li&gt;
&lt;li&gt;ns-1418.awsdns-59.org&lt;/li&gt;
&lt;li&gt;ns-265.awsdns-73.com
Your Classic Load Balancer is running and serving HTTP on port 80 or 8080.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Request a Public Certificate in ACM&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to AWS Certificate Manager (ACM).&lt;/li&gt;
&lt;li&gt;Click Request Certificate.&lt;/li&gt;
&lt;li&gt;Choose Request a Public Certificate.&lt;/li&gt;
&lt;li&gt;Enter domain:&lt;/li&gt;
&lt;li&gt;vsarath.site&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.vsarath.site" rel="noopener noreferrer"&gt;www.vsarath.site&lt;/a&gt; (optional)&lt;/li&gt;
&lt;li&gt;Choose DNS validation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Press enter or click to view image in full size&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click Request.&lt;/li&gt;
&lt;li&gt;After request:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Click Create DNS record in Route 53.&lt;/li&gt;
&lt;li&gt;ACM will create the _acme-challenge CNAME record.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Wait a few minutes until status becomes Issued.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 2: Add HTTPS Listener to CLB&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to EC2 Console &amp;gt; Load Balancers.&lt;/li&gt;
&lt;li&gt;Select your Classic Load Balancer.&lt;/li&gt;
&lt;li&gt;Go to Listeners tab.&lt;/li&gt;
&lt;li&gt;Click Add Listener (or edit existing 443):&lt;/li&gt;
&lt;li&gt;Protocol: HTTPS&lt;/li&gt;
&lt;li&gt;Load Balancer Port: 443&lt;/li&gt;
&lt;li&gt;Instance Protocol: HTTP (or HTTPS if applicable)&lt;/li&gt;
&lt;li&gt;Instance Port: 80 (or 8080 if your app runs there)&lt;/li&gt;
&lt;li&gt;SSL Certificate: Choose the one for aluru.site&lt;/li&gt;
&lt;li&gt;Security Policy: Select ELBSecurityPolicy-2021–06&lt;/li&gt;
&lt;li&gt;Click Save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Update Security Group Rules&lt;/strong&gt;&lt;br&gt;
Go to your EC2 or Load Balancer Security Group:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add Inbound Rule:&lt;/li&gt;
&lt;li&gt;Type: HTTPS&lt;/li&gt;
&lt;li&gt;Protocol: TCP&lt;/li&gt;
&lt;li&gt;Port: 443&lt;/li&gt;
&lt;li&gt;Source: 0.0.0.0/0&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Ensure existing rules allow HTTP (port 80) or your backend port.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Configure DNS in Route 53&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In ArgoCD UI, open your project application.&lt;/li&gt;
&lt;li&gt;Click on frontend and copy the hostname (e.g., acfb06fba08834577a50e43724d328e3-1568967602.us-east-1.elb.amazonaws.com).&lt;/li&gt;
&lt;li&gt;Go to Route 53 &amp;gt; Hosted Zones.&lt;/li&gt;
&lt;li&gt;Select aluru.site.&lt;/li&gt;
&lt;li&gt;Click Create Record:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Record name: leave blank (for root domain)&lt;/li&gt;
&lt;li&gt;Record type: A — Routes traffic to an IPv4 address and AWS resource&lt;/li&gt;
&lt;li&gt;Alias: Yes&lt;/li&gt;
&lt;li&gt;Alias target: Choose Application and Classic Load Balancer&lt;/li&gt;
&lt;li&gt;Region: US East (N. Virginia)&lt;/li&gt;
&lt;li&gt;Alias target value: Paste the frontend load balancer DNS (from step 2)&lt;/li&gt;
&lt;li&gt;Click Create Record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Test Your Setup&lt;/strong&gt;&lt;br&gt;
Using Browser&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visit:
https://vsarathsite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see your application load securely over HTTPS.&lt;/p&gt;

&lt;p&gt;Using curl&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -v https://vsarath.site
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expect HTTP 200 OK or the actual page content.&lt;/p&gt;

&lt;p&gt;if everything is okay you will see the below website&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4zo1q1mzm00iv6jluc5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4zo1q1mzm00iv6jluc5.jpg" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If no DNS or domain you can still access the website with loadbalancer link&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Troubleshooting&lt;br&gt;
HTTPS times out?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check port 443 is open in Security Group.&lt;/li&gt;
&lt;li&gt;Make sure your app is reachable from the CLB.&lt;/li&gt;
&lt;li&gt;ACM certificate must be in Issued status.&lt;/li&gt;
&lt;li&gt;HTTP works but HTTPS doesn’t?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Listener or certificate may not be configured properly.&lt;br&gt;
Check the load balancer health check passes.&lt;/p&gt;
&lt;h2&gt;
  
  
  Monitoring Steps
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Kubernetes Monitoring: Step-by-Step with Prometheus &amp;amp; Grafana
&lt;/h2&gt;

&lt;p&gt;Install Prometheus + Grafana to Monitor Your K8s Cluster&lt;br&gt;
&lt;strong&gt;📊 Monitor your Argo CD–deployed website (running via LoadBalancer) — with Prometheus + Grafana&lt;/strong&gt;&lt;br&gt;
🔧 View CPU, RAM, pod status, uptime, errors, etc.&lt;/p&gt;

&lt;p&gt;🧰 Prerequisites (Before We Start)&lt;br&gt;
Make sure you have these ready 👇&lt;br&gt;
1️. A Kubernetes Cluster (EKS, GKE, Minikube — anything works)&lt;br&gt;
2️. kubectl is installed and connected to your cluster &lt;br&gt;
3️. Helm is installed (helm version)&lt;/p&gt;
&lt;h1&gt;
  
  
  Install Helm (if not installed)
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;helm version&lt;br&gt;
4️. Internet access to pull charts &amp;amp; Docker images&lt;br&gt;
5️. (Optional) Argo CD if you want GitOps deployment&lt;br&gt;
If you’re using GitOps, ensure:&lt;br&gt;
☑ Argo CD is already deployed&lt;br&gt;
☑ Your app is deployed using Argo CD&lt;br&gt;
☑ Access to the app via Load Balancer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Create a Namespace for Monitoring&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create namespace monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2️⃣ Add Prometheus &amp;amp; Grafana Helm Chart Repo&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3️⃣ Install the Kube Prometheus Stack (Includes Prometheus + Grafana)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm install kube-prom-stack prometheus-community/kube-prometheus-stack \
  --namespace monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🛠️ This installs:&lt;/p&gt;

&lt;p&gt;Prometheus (metrics collector)&lt;br&gt;
Grafana (dashboard visualizer)&lt;br&gt;
Alertmanager (for warnings)&lt;br&gt;
Node exporters (to get node metrics)&lt;br&gt;
&lt;strong&gt;4️⃣Check That Everything Is Runnin&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -n monitoring
You will get output like this :
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                                                     READY   STATUS    RESTARTS   AGE
alertmanager-kube-prom-stack-kube-prome-alertmanager-0   2/2     Running   0          2m45s
kube-prom-stack-grafana-d5dfd9fd-m5j9t                   3/3     Running   0          3m19s
kube-prom-stack-kube-prome-operator-6779bc5685-llmc8     1/1     Running   0          3m19s
kube-prom-stack-kube-state-metrics-6c4dc9d54-w48xj       1/1     Running   0          3m19s
kube-prom-stack-prometheus-node-exporter-vhncz           1/1     Running   0          3m19s
kube-prom-stack-prometheus-node-exporter-vx56f           1/1     Running   0          3m19s
prometheus-kube-prom-stack-kube-prome-prometheus-0       2/2     Running   0          2m45s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Wait until STATUS is Running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5️⃣. Accessing the Grafana UI Using LoadBalancer&lt;/strong&gt;&lt;br&gt;
Prometheus stack exposes Grafana as an internal service by default. Let’s expose it to the world 🌍.&lt;/p&gt;

&lt;p&gt;Edit the Grafana Server File&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl edit svc kube-prom-stack-grafana -n monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the Service Type :&lt;br&gt;
Find this line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: ClusterIP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: LoadBalancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit (:wq for vi).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6️⃣. Get the Grafana LoadBalancer IP&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get svc kube-prom-stack-grafana -n monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will get output like this :&lt;br&gt;
NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)        AGE&lt;br&gt;
kube-prom-stack-grafana   LoadBalancer   172.20.174.208   abbda6b6f6c9345c6b017c020cf00122-1809047356.us-east-1.elb.amazonaws.com   80:32242/TCP   5m39s&lt;br&gt;
📌 Copy the EXTERNAL-IP, it will look like: &lt;a href="http://a1b2c3d4.us-east-1.elb.amazonaws.com" rel="noopener noreferrer"&gt;http://a1b2c3d4.us-east-1.elb.amazonaws.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7️⃣Accessing the Grafana UI&lt;/strong&gt;&lt;br&gt;
Open Your Browser&lt;br&gt;
Copy the EXTERNAL-IP (the long .elb.amazonaws.com address).&lt;br&gt;
Paste it into your browser:&lt;/p&gt;

&lt;p&gt;You’ll see the Grafana login page!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔐 Get the Initial Grafana Admin Password
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get secret kube-prom-stack-grafana -n monitoring -o jsonpath="{.data.admin-password}" | base64 -d &amp;amp;&amp;amp; echo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You will get output like this :&lt;br&gt;
prom-operator&lt;br&gt;
Login to Grafana :&lt;br&gt;
Go to your LoadBalancer IP in browser.&lt;br&gt;
Default credentials:&lt;br&gt;
Username: admin&lt;br&gt;
Password: prom-operator&lt;br&gt;
👉 Change the password when prompted.&lt;br&gt;
You will like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwv9m1co3zuw1ohc3twze.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwv9m1co3zuw1ohc3twze.jpg" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8️⃣ Add Kubernetes Dashboards in Grafana&lt;/strong&gt;&lt;br&gt;
📊 Go to:&lt;br&gt;
Left menu → Dashboards → + Import → New Dashboard&lt;br&gt;
Paste Dashboard ID:&lt;/p&gt;

&lt;p&gt;In the text box under “Import via Grafana.com”, paste this number:&lt;/p&gt;

&lt;p&gt;Otherwise you can use Json Files in this repository You can download Jason files and you can upload In the dashboard.&lt;/p&gt;

&lt;p&gt;Become a member&lt;br&gt;
Kubernetes Cluster Monitoring (ID: 315)&lt;br&gt;
Kubernetes Pods/Containers (ID: 3662)&lt;br&gt;
Kubernetes Deployments (ID: 1621)&lt;br&gt;
Kubernetes API Server (ID: 12006)&lt;br&gt;
Kubernetes Nodes (ID: 6417)&lt;br&gt;
Kubernetes Namespace Monitoring (ID: 10000)&lt;br&gt;
Kubernetes Persistent Volumes (ID: 13602)&lt;br&gt;
Kubernetes Networking (ID: 15758)&lt;br&gt;
NGINX Ingress Controller (ID: 9614)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click Load&lt;/strong&gt;&lt;br&gt;
Grafana expects one dashboard ID at a time in the “Grafana.com dashboard URL or ID” field.&lt;br&gt;
For example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You can enter 315, click Load, and then import that dashboard.&lt;/li&gt;
&lt;li&gt;You must repeat this for each dashboard ID (e.g., 3662, 1621, etc.).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;2. Select Data source&lt;/strong&gt;&lt;br&gt;
On the next screen:&lt;br&gt;
You’ll see a dropdown Prometheus Data Source.&lt;br&gt;
Choose Prometheus (it’s already installed with kube-prometheus-stack).&lt;br&gt;
Then click Import.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. View the Dashboard&lt;/strong&gt;&lt;br&gt;
After importing, the dashboard will automatically open.&lt;br&gt;
You’ll now see:&lt;br&gt;
CPU usage per Node (which node is using the most CPU).&lt;br&gt;
Memory usage per Pod (how much RAM each pod is using).&lt;br&gt;
Cluster Uptime.&lt;br&gt;
Requests, errors, etc.&lt;/p&gt;

&lt;p&gt;9️⃣ See Your Argo CD App Metrics!&lt;br&gt;
All apps running in your cluster (including ones deployed via Argo CD) are automatically monitored!&lt;/p&gt;

&lt;p&gt;You can import the Argo CD dashboard from Grafana.com:&lt;/p&gt;

&lt;p&gt;Go to Dashboards → Import.&lt;br&gt;
Use Dashboard ID 14584 (Argo CD Official Dashboard).&lt;br&gt;
Select Prometheus as the data source.&lt;/p&gt;

&lt;p&gt;[Optional] Configure Alerts (Email Notifications&lt;br&gt;
When CPU usage (or any other metric) goes beyond a threshold, you’ll receive an email alert from Alertmanager (part of Prometheus stack).&lt;/p&gt;

&lt;p&gt;⓵ Confirm Alertmanager is Running&lt;/p&gt;

&lt;p&gt;After installing the kube-prometheus-stack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -n monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alertmanager-kube-prom-stack-kube-prome-alertmanager-0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ If it’s running, you’re good to go.&lt;br&gt;
⓶ The Alertmanager dashboard provides:&lt;br&gt;
Active Alerts — A list of alerts currently firing (e.g., high CPU usage).&lt;br&gt;
Silences — You can configure silences to suppress certain alerts.&lt;br&gt;
Status — Displays cluster and configuration status.&lt;br&gt;
Receivers — Configured receivers like email, Slack, etc.&lt;br&gt;
Routes — The routing tree for alert notifications.&lt;br&gt;
⓷ Edit the Alertmanager Config Ma&lt;br&gt;
The configuration for Alertmanager is stored in a ConfigMap.&lt;br&gt;
Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -n monitoring | grep alertmanage
Ensure:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;alertmanager-kube-prom-stack-kube-prome-alertmanager-0   2/2   Running&lt;br&gt;
✅ To Access Alertmanager via Load Balancer (Externally):&lt;/p&gt;

&lt;p&gt;You need to change the service type from ClusterIP to LoadBalancer.&lt;/p&gt;

&lt;p&gt;🔧 Step 1: Edit the Alertmanager Service&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl edit svc kube-prom-stack-kube-prome-alertmanager -n monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔄 Step 2: Change This Line:&lt;/p&gt;

&lt;p&gt;Find:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: ClusterIP

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: LoadBalancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit (:wq if using vim)&lt;/p&gt;

&lt;p&gt;⏳ Step 3: Wait for External IP&lt;/p&gt;

&lt;p&gt;Check again with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
kubectl get svc kube-prom-stack-kube-prome-alertmanager -n monitorin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will show something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kube-prom-stack-kube-prome-alertmanager   LoadBalancer   172.20.51.43   abc123456789.elb.amazonaws.com   9093:xxxxx/TCP   ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Copy the DNS under EXTERNAL-IP&lt;/p&gt;

&lt;p&gt;🌐 Step 4: Access Alertmanager in Browser&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://&amp;lt;external-dns&amp;gt;:9093
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://abc123456789.elb.amazonaws.com:9093
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Optional: Open Port 9093 in Security Group&lt;/p&gt;

&lt;p&gt;If it doesn’t load:&lt;/p&gt;

&lt;p&gt;Go to AWS EC2 Console → Load Balancers&lt;br&gt;
Find the Alertmanager ELB&lt;br&gt;
Open the Security Group&lt;br&gt;
Edit Inbound Rules:&lt;br&gt;
Add rule for TCP 9093&lt;br&gt;
Source: 0.0.0.0/0 (or your IP)&lt;br&gt;
&lt;strong&gt;run this commends&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get secret alertmanager-kube-prom-stack-kube-prome-alertmanager -n monitoring -o jsonpath='{.data.alertmanager\.yaml}' | base64 --decode &amp;gt; alertmanager.yaml
ls
vim alertmanager.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⓸ Add Email Configuration&lt;/p&gt;

&lt;p&gt;Inside the alertmanager.yml section, add your SMTP email settings:&lt;br&gt;
(Replace with your email SMTP provider details.)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;global:
  smtp_smarthost: 'smtp.gmail.com:587'      # Your SMTP server
  smtp_from: 'yaswanth.arumulla@hmail.com'         # Sender email
  smtp_auth_username: 'yaswanth.arumulla@gmai.com'
  smtp_auth_password: 'your-app-password'   # Use app password (not your real password!)
route:
  receiver: 'email-alert'
receivers:
  - name: 'email-alert'
    email_configs:
      - to: 'yaswanth.arumulla@gmail.com'      # Where to send alerts
        send_resolved: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ For Gmail:&lt;/p&gt;

&lt;p&gt;Enable “Less Secure Apps” or create an App Password from Google account security settings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create secret generic alertmanager-kube-prom-stack-kube-prome-alertmanager \
  --from-file=alertmanager.yaml \
  -n monitoring \
  --dry-run=client -o yaml | kubectl apply -f -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⓹ Save and Restart Alertmanager&lt;/p&gt;

&lt;p&gt;After editing, restart the Alertmanager pod to apply changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl delete pod alertmanager-kube-prom-stack-kube-prome-alertmanager-0 -n monitorin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wait for Restart&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -n monitoring -w
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alertmanager-kube-prom-stack-kube-prome-alertmanager-0   2/2   Running   0   30s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⓺ Create an Alert Rule (CPU Example)&lt;/p&gt;

&lt;p&gt;We’ll add an alert rule to trigger an email when CPU &amp;gt; 70%.&lt;/p&gt;

&lt;p&gt;Create a new YAML file called cpu-alert-rule.yaml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: cpu-alert
  namespace: monitoring
spec:
  groups:
    - name: cpu.rules
      rules:
        - alert: HighCPUUsage
          expr: sum(rate(container_cpu_usage_seconds_total[1m])) &amp;gt; 0.7
          for: 2m
          labels:
            severity: warning
          annotations:
            summary: "High CPU Usage detected"
            description: "CPU usage is above 70% for 2 minutes."
Apply the rule:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -f cpu-alert-rule.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⓻ Test Your Alert&lt;/p&gt;

&lt;p&gt;Run a CPU-heavy process in a pod (simulate load).&lt;br&gt;
Wait 2–3 minutes.&lt;br&gt;
Check your email — you should receive an alert!&lt;br&gt;
You can also see alerts in the Prometheus UI:&lt;/p&gt;

&lt;p&gt;Step 1: Edit the Prometheus Service&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl edit svc kube-prom-stack-kube-prome-prometheus -n monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the Service Type :&lt;/p&gt;

&lt;p&gt;Find this line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: ClusterIP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: LoadBalancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit (:wq for vi).&lt;/p&gt;

&lt;p&gt;Get the Prometheus LoadBalancer IP&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get svc kube-prom-stack-kube-prome-prometheus -n monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NAME                                    TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)                         AGE&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kube-prom-stack-kube-prome-prometheus   LoadBalancer   172.20.146.205   a17530e645b134734ba1cff112072526-1666914053.us-east-1.elb.amazonaws.com   9090:32606/TCP,8080:31797/TCP   3h35m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📌 Copy the EXTERNAL-IP, it will look like: &lt;a href="http://a1b2c3d4.us-east-1.elb.amazonaws.com:9090" rel="noopener noreferrer"&gt;http://a1b2c3d4.us-east-1.elb.amazonaws.com:9090&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Done!&lt;/p&gt;

&lt;p&gt;Now, you’ll get email alerts whenever CPU usage crosses the limit.&lt;/p&gt;

&lt;p&gt;🎉 Final Checklist&lt;/p&gt;

&lt;p&gt;✅ Prometheus &amp;amp; Grafana Installed&lt;br&gt;
✅ Grafana Accessible via LoadBalancer&lt;br&gt;
✅ Kubernetes Metrics Visible&lt;br&gt;
✅ Argo CD Deployed App Visible&lt;br&gt;
✅ Dashboards Working&lt;br&gt;
✅ Optional Alerts Configured&lt;/p&gt;

&lt;p&gt;Bonus: What You Can Monitor&lt;/p&gt;

&lt;p&gt;✅ CPU/RAM of your Argo CD app&lt;br&gt;
✅ Pod crashes/restarts&lt;br&gt;
✅ Node health&lt;br&gt;
✅ Cluster capacity&lt;br&gt;
✅ Response times&lt;br&gt;
✅ Resource usage per container&lt;/p&gt;

</description>
      <category>automation</category>
      <category>aws</category>
      <category>devops</category>
      <category>terraform</category>
    </item>
    <item>
      <title>VoiceScribe: Elevating Transcriptions with AssemblyAI's Universal-2 Model</title>
      <dc:creator>Sarath V</dc:creator>
      <pubDate>Sun, 24 Nov 2024 06:49:25 +0000</pubDate>
      <link>https://dev.to/sarath_v_/voicescribe-elevating-transcriptions-with-assemblyais-universal-2-model-4e71</link>
      <guid>https://dev.to/sarath_v_/voicescribe-elevating-transcriptions-with-assemblyais-universal-2-model-4e71</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/assemblyai"&gt;AssemblyAI Challenge &lt;/a&gt;: Sophisticated Speech-to-Text.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built VoiceScribe, a cutting-edge speech-to-text application that leverages AssemblyAI's Universal-2 model to deliver precise, formatted, and highly contextual transcriptions. VoiceScribe is tailored to professionals and industries that require high-quality transcription with advanced features like proper noun recognition, timestamping, and seamless formatting.&lt;/p&gt;

&lt;p&gt;Key features include:&lt;/p&gt;

&lt;p&gt;High-Accuracy Transcriptions: Powered by Universal-2, VoiceScribe excels at converting complex audio into detailed and accurate text.&lt;br&gt;
Automatic Formatting: Recognizes sentence structures, proper nouns, and numbers, ensuring polished results.&lt;br&gt;
Timestamps for Context: Adds timestamps for every spoken segment to improve usability in meetings, interviews, and video editing workflows.&lt;br&gt;
Searchable Archives: Enables keyword-based search within transcriptions for efficient information retrieval.&lt;br&gt;
Multiple File Formats: Supports various audio formats, ensuring compatibility with diverse use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sb1xsz849-zeh3--5173--d3acb9e1.local-credentialless.webcontainer.io/" rel="noopener noreferrer"&gt;https://sb1xsz849-zeh3--5173--d3acb9e1.local-credentialless.webcontainer.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffv5o780bis01gzpv01qc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffv5o780bis01gzpv01qc.png" alt="Image description" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;To build this application, I integrated AssemblyAI’s Universal-2 Model API with a front-end built using React and a back-end using Node.js. Here’s how AssemblyAI enhanced my application:&lt;/p&gt;

&lt;p&gt;Real-Time Speech Processing:&lt;br&gt;
The Universal-2 model was critical for converting diverse audio inputs into text with high fidelity, even in noisy environments or with heavy accents.&lt;/p&gt;

&lt;p&gt;Additional Prompts:&lt;/p&gt;

&lt;p&gt;Summarization API: AssemblyAI’s summarization feature allowed me to generate concise outputs for meetings, interviews, and podcasts.&lt;br&gt;
Topic Detection API: Incorporated to categorize audio into predefined topics, enhancing user experience for searching and organizing content.&lt;br&gt;
Accessibility Features:&lt;br&gt;
Leveraging AssemblyAI’s capabilities, I ensured that the app supports subtitles and closed captions for hearing-impaired users.&lt;/p&gt;

&lt;p&gt;Challenges Faced&lt;br&gt;
Noisy Audio: Mitigated transcription errors from background noise by preprocessing audio files.&lt;br&gt;
Large File Sizes: Optimized file handling and API batching for long recordings.&lt;br&gt;
Formatting Variability: Tuned the API integration to consistently produce human-readable text with minimal post-editing.&lt;br&gt;
Future Plans&lt;br&gt;
Adding real-time transcription for live events.&lt;br&gt;
Integrating multilingual support for international users.&lt;br&gt;
Developing mobile apps for transcription on the go.&lt;/p&gt;

&lt;p&gt;This was a solo submission, but feedback and testing were conducted with [Teammate DEV Usernames, if any].&lt;/p&gt;

&lt;p&gt;Thank you for the opportunity to participate in the AssemblyAI Challenge!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>assemblyaichallenge</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>VoiceScribe: Revolutionizing Real-Time Speech-to-Text</title>
      <dc:creator>Sarath V</dc:creator>
      <pubDate>Sun, 24 Nov 2024 06:45:52 +0000</pubDate>
      <link>https://dev.to/sarath_v_/voicescribe-revolutionizing-real-time-speech-to-text-7c6</link>
      <guid>https://dev.to/sarath_v_/voicescribe-revolutionizing-real-time-speech-to-text-7c6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/assemblyai"&gt;AssemblyAI Challenge &lt;/a&gt;: Really Rad Real-Time.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built SpeakSync, a real-time transcription application that transforms live audio streams into actionable insights using AssemblyAI's Streaming API. SpeakSync is designed to elevate live interactions in various contexts, including:&lt;/p&gt;

&lt;p&gt;Virtual Meetings: Providing real-time captions and keyword highlights.&lt;br&gt;
Live Events: Generating instant transcriptions for accessibility and post-event summaries.&lt;br&gt;
Customer Support: Offering real-time analysis of customer interactions to improve agent performance.&lt;br&gt;
Key features include:&lt;/p&gt;

&lt;p&gt;Real-Time Transcription: Converts live audio streams into text instantly.&lt;br&gt;
Live Keyword Highlights: Dynamically displays important keywords as they are spoken.&lt;br&gt;
Sentiment Tracking: Detects sentiment in live conversations, enabling immediate insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sparkly-dodol-489ff6.netlify.app/" rel="noopener noreferrer"&gt;https://sparkly-dodol-489ff6.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jxtbj8rcnlwpwqvx6xa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jxtbj8rcnlwpwqvx6xa.png" alt="Image description" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;To implement the Streaming API from AssemblyAI, I followed these steps:&lt;/p&gt;

&lt;p&gt;Integration with AssemblyAI:&lt;/p&gt;

&lt;p&gt;Utilized the Streaming API to receive text in real time from live audio streams.&lt;br&gt;
Configured the application to handle low-latency data streams for a seamless user experience.&lt;br&gt;
Additional Tools for Enhancement:&lt;/p&gt;

&lt;p&gt;Sentiment Analysis: Used AssemblyAI’s sentiment detection feature to monitor the tone of conversations.&lt;br&gt;
Keyword Spotting: Incorporated real-time keyword extraction to display important terms dynamically on the UI.&lt;br&gt;
Frontend and Backend Setup:&lt;/p&gt;

&lt;p&gt;Frontend: Built using React, focusing on a clean, real-time updating interface.&lt;br&gt;
Backend: Used Node.js to manage the audio streams and API requests efficiently.&lt;br&gt;
Handling Edge Cases:&lt;/p&gt;

&lt;p&gt;Addressed noisy audio and overlapping speakers by using AssemblyAI's advanced audio processing capabilities.&lt;/p&gt;

&lt;p&gt;Challenges Faced&lt;br&gt;
Latency Optimization:&lt;br&gt;
Worked on reducing latency to ensure real-time transcription matched the spoken words without noticeable delays.&lt;/p&gt;

&lt;p&gt;Speaker Overlap:&lt;br&gt;
Integrated logic to flag and manage instances where multiple speakers talked simultaneously.&lt;/p&gt;

&lt;p&gt;User Scalability:&lt;br&gt;
Designed the backend to handle concurrent users and multiple audio streams efficiently.&lt;/p&gt;

&lt;p&gt;Future Plans&lt;br&gt;
Integrating translation capabilities for multilingual real-time transcription.&lt;br&gt;
Developing mobile support for event organizers and remote teams.&lt;br&gt;
Adding an offline transcription feature for recorded streams.&lt;/p&gt;

&lt;p&gt;This was an individual submission, but special thanks to the developer community for providing invaluable feedback during testing.&lt;/p&gt;

&lt;p&gt;Thank you for reviewing my submission for the AssemblyAI Really Rad Real-Time Challenge!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87ebkrar4qnqdpd4wfgh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87ebkrar4qnqdpd4wfgh.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>assemblyaichallenge</category>
      <category>ai</category>
      <category>api</category>
    </item>
  </channel>
</rss>
