Sannidhi Durga Pavan Sriram

Cloud, DevOps and SRE

I'm a final-year B.Tech CSE student at Lovely Professional University (graduating 2027), based in Hyderabad.

I build on AWS and Azure: Terraform infrastructure, a Vault and Wazuh detection lab, a Kubernetes GitOps pipeline and an auto-scaling service that replaces failed servers.

Open to cloud, DevOps and SRE internships and entry-level roles.

Terraform, AWS, Azure, Kubernetes, Argo CD, Jenkins, Docker, Prometheus, Grafana, Wazuh, Python

Download CV (PDF) Get in touch

Portrait of Sannidhi Sriram

Projects

I removed every AWS and Azure resource after testing to avoid bills, so each repository holds the screenshots, Terraform and write-ups. Each project also lists its limits. Every project has an interactive architecture diagram.

  1. 02 AWS · Terraform

    Cloud Compliance and Vendor Risk Lab

    Terraform plants four misconfigurations; Config and Security Hub findings become a risk register.

    Terraform deploys four deliberately bad resources: a public S3 bucket, a security group open to SSH from anywhere, an unencrypted EBS volume and an IAM user without MFA. AWS Config and Security Hub, set to the CIS AWS Foundations Benchmark v1.4.0, evaluate them, and two EventBridge rules send failures to a Python Lambda.

    The Lambda writes each finding to S3, merges the duplicates that Config and Security Hub both report, and rebuilds a risk register as JSON and CSV. In the live run it recorded 21 findings, 17 mapped to CIS controls and 4 unmapped, each with an owner and an SLA based on severity. Alongside it, a command-line script scores a fictional vendor from a sample questionnaire and writes a report, and a small Flask dashboard shows the register and the vendor score.

    The ISO 27001 and NIST CSF mappings are my own indicative crosswalk, not an official one, and the vendor and its answers are invented. The dashboard reads a saved copy of the register, not the live S3 file.

    Terraform, AWS Config, Security Hub, EventBridge, Lambda (Python), Flask

  2. 03 AWS, us-east-1 · Terraform

    Cloud Support Simulation

    Two support tickets worked end to end on one EC2 instance: a fix and a restore.

    One t3.micro in the default VPC runs a small Flask app. Terraform creates the instance, its security group, IAM roles, a CloudWatch log group and a daily AWS Backup plan. I played two roles: an owner who builds it, and a support analyst with scoped, non-admin permissions (an attempt to create an access key as that user was denied).

    Ticket one, the app is down: the analyst connected through SSM Session Manager, saw the app healthy on the host while CloudWatch Logs Insights showed no requests arriving, traced it to a missing security group rule and added it back. Ticket two, my data is gone: I restored a deleted file from an AWS Backup recovery point onto a new instance. The job reported COMPLETED, but a file written seconds before the backup was missing, so I checked the restored instance directly before writing to the customer. I also set up an AWS Client VPN endpoint with mutual-TLS certificates made with Easy-RSA and reached the instance's private IP over it.

    The write-ups are two incident reports, two knowledge-base articles and a customer update. It is a simulation: one instance with a public IP in the default VPC, and SSM session logging was not turned on.

    Terraform, AWS Client VPN, SSM Session Manager, CloudWatch Logs Insights, AWS Backup

  3. 04 AWS, ap-south-1 · Terraform

    Observability Stack on ECS Fargate

    Prometheus and Grafana on ECS Fargate, with a dashboard and an alert.

    Terraform builds a VPC with two public subnets, a security group, IAM roles, an ECS cluster and a CloudWatch log group, then runs two Fargate services. Prometheus uses a custom image I built for linux/amd64 and pushed to ECR. Grafana runs the stock image.

    In Grafana I made a three-panel dashboard (total HTTP requests, request rate over 5 minutes and active time series) and an alert rule that fires when the request rate passes 0.5, evaluated every minute. Screenshots of the cluster, the Prometheus targets, the dashboard and the alert are in the repository.

    Prometheus only scrapes itself, so the dashboard shows Prometheus's own metrics and no application was monitored. Both services have public IPs, with ports 3000 and 9090 open to the internet. That suits a short lab; a production setup would restrict access.

    Terraform, ECS Fargate, Prometheus, Grafana, ECR

  4. 05 Kubernetes (Minikube) · GitOps

    AI Test Generator and GitOps Pipeline

    Jenkins to ECR to Argo CD: a GitOps pipeline around a FastAPI test generator.

    The service is a FastAPI app with one real endpoint. POST /generate takes up to 2,000 characters of Python, validates it, limits callers to 5 requests a minute and asks Groq's llama-3.1-8b-instant for a pytest file. The project is mostly the pipeline around it: a Jenkins job runs pytest with a 70% coverage gate, builds a multi-stage Docker image, pushes it to ECR (created with Terraform) tagged with the build number and commit, and commits that tag to a second repository that holds the Helm chart.

    Keeping the chart in its own repository is how the project applies GitOps. Jenkins does not hold cluster credentials; it only writes an image tag to Git. An Argo CD application watching the chart repository syncs it to a Minikube cluster, where the Deployment pulls from ECR with a pull secret and reads the Groq key from a Kubernetes Secret.

    The Argo CD application and the cluster were set up by hand outside the two repositories, so the repos show the chart and the CI side but not Argo CD itself.

    FastAPI, Jenkins, Docker, ECR (Terraform), Helm, Argo CD

  5. 06 AWS, us-east-1 · Terraform

    Self-Healing Microservice

    A Spring Boot service on an Auto Scaling Group that replaces failed servers.

    Terraform builds a VPC across two Availability Zones, an Application Load Balancer with a target group, and an Auto Scaling Group of 2 to 4 t3.micro instances whose user data installs Docker and runs the Spring Boot image. Recovery happens in layers: the Actuator health endpoint, a Docker health check every 30 seconds, ALB health checks that drop a target after 3 failed 30 second checks (about 90 seconds), an ASG that uses those ELB checks to replace the instance, and a target-tracking policy that adds instances at 80% CPU.

    A GitHub Actions workflow builds with Maven, runs the tests, pushes the image to Docker Hub and runs Snyk dependency and image scans. It ran green in February 2026.

    Two things to improve: Snyk runs after the push, so a finding fails the run but does not stop the image being published, and deploying a new image to EC2 is manual. Runs since February stop at the Docker Hub login because the secrets are no longer set.

    Terraform, ALB and Auto Scaling, Spring Boot, GitHub Actions, Snyk

  6. 07 AWS, us-east-1 · Serverless

    Bookstore Serverless API

    A Node.js Lambda behind API Gateway; the database is not connected yet.

    A Node.js 20 Lambda handles GET and POST /books behind an API Gateway REST API on a prod stage, with CORS enabled and logs going to CloudWatch. I built it to practise mapping the parts of a bookstore API (compute, routing, storage, logging) onto serverless services. The repository keeps the deployment screenshots and an architecture write-up.

    On the Free Tier it costs nothing while idle, because Lambda and API Gateway charge per request. I deleted the AWS resources after testing.

    It is still a prototype: the handler keeps three books in an array inside the function, so a POSTed book disappears on the next cold start. I set up a MongoDB Atlas cluster and the mongodb driver is in package.json, but the code does not connect to it yet. Connecting it is the next step.

    AWS Lambda, API Gateway, CloudWatch Logs

  7. 08 Azure · Python

    Patient Triage on Azure

    Flask on Azure App Service sends symptoms to Azure OpenAI and logs to Table Storage.

    A Flask app on Azure App Service (Linux, B1 tier, Gunicorn) takes a free-text symptom description and sends it to an Azure OpenAI gpt-4o deployment. The prompt asks for Urgent Care, Non-Urgent Visit or Self Care plus a short reason, and the app shows the answer. Each symptom and result pair is written to an Azure Table Storage table called triagelogs.

    I built it to practise wiring the cloud services together. Compute, model and storage are three managed services, and all keys come from App Service configuration, so none are in the repository. A PDF of timestamped console screenshots shows the resources and the app running before I decommissioned them.

    It is a proof of concept without authentication, input validation, rate limiting or retries around the model call, and its answers are not meant for real medical decisions.

    Azure App Service, Azure OpenAI, Azure Table Storage, Flask

Terminal

Feel free to explore. Type help. cat <project name> prints a short write-up instantly; ask <question> sends a detailed question to a small AI that only knows my project write-ups. The suggestions below change on every visit.

Experience

AI Intern and Cloud Deployment Lead, Infosys Springboard

Remote · February to April 2026 · AI KYC verification system

A 25-member team split into ML, web and cloud sub-teams. I led the cloud sub-team and was one of two co-leads, alongside the ML lead, coordinating all three.

In sprint 14 I took the system to AWS: the React frontend on S3 static hosting, and the Node.js API and the Flask ML service (three GNN document models) on EC2, both run under PM2. Five deployment defects came up:

Infosys Springboard internship certificate for Sannidhi Durga Pavan Sriram
Internship certificate from Infosys Springboard. Open full size (opens in a new tab)
Request path
The frontend called the ML service directly, bypassing the backend and breaking auth and CORS. I routed everything through one backend endpoint.
Bind address
The Node.js API listened on 127.0.0.1 only and refused outside connections. I bound it to 0.0.0.0.
CORS
The API only allowed localhost:5173, which blocked the S3-hosted frontend. I added the S3 origin.
PM2 interpreter
PM2 started the ML service with system Python, which crashed on a missing numpy. I pointed PM2 at the virtual environment's interpreter.
Bad uploads
A random non-KYC image could crash the flow. I added a "Non-KYC Document" result path end to end.

Certifications

Oracle Race to Certification Top 500 badge

Top 500 worldwide on Oracle's Race to Certification 2025 leaderboard, which ranks people by the number of OCI certifications earned during the event and their exam scores. I earned four OCI Professional-level certifications.

  1. OCI DevOps Professional 2025 Oracle · September 2025 Verify credential for OCI DevOps Professional (opens in a new tab)
  2. OCI Observability Professional 2025 Oracle · August 2025 Verify credential for OCI Observability Professional (opens in a new tab)
  3. OCI Multicloud Architect 2025 Oracle · August 2025 Verify credential for OCI Multicloud Architect (opens in a new tab)
  4. OCI Generative AI Professional 2025 Oracle · August 2025 Verify credential for OCI Generative AI Professional (opens in a new tab)
  5. Azure AI Fundamentals (AI-900) Microsoft · June 2025 Verify credential for Azure AI Fundamentals (opens in a new tab)
  6. Azure Fundamentals (AZ-900) Microsoft · January 2025 Verify credential for Azure Fundamentals (opens in a new tab)

Education

Contact

I'm in Hyderabad (IST, UTC+5:30). Email is the fastest way to reach me.

Architecture diagram