βοΈ Cloud Engineer | Enterprise IT Professional
Building cloud projects, breaking things responsibly, and documenting what I learn along the way. βοΈπ οΈ
AWS β’ Terraform β’ Linux β’ Docker β’ Kubernetes β’ Container Orchestration β’ Jenkins β’ GitHub Actions β’ CI/CD β’ Cloud Troubleshooting
π Explore My ProjectsI am an IT professional with 18 years of experience supporting users in enterprise environments and 21 years with Allstate. My background includes technical support, troubleshooting, customer service, documentation, problem-solving, and supporting business-critical technology.
I am expanding that experience into cloud engineering through hands-on projects using AWS, Terraform, Infrastructure as Code, Linux, Docker, Docker Swarm, Kubernetes, Jenkins, GitHub Actions, automation, monitoring, and CI/CD.
My projects focus on more than simply getting something to deploy. I want to understand how the pieces connect, what happens when something breaks, how to validate that the environment actually works, and how to make the next version more secure, repeatable, and reliable.
This portfolio is built with HTML and CSS, maintained in GitHub, stored in Amazon S3, and delivered securely through Amazon CloudFront. Amazon Route 53 provides DNS routing for the custom domain, while AWS Certificate Manager provides the TLS certificate used for HTTPS.
AWS Certificate Manager secures both mandyreed.com and www.mandyreed.com with HTTPS. Source code and version history are maintained in GitHub.
These are the projects where I get to build things, troubleshoot them, figure out why they broke, and occasionally wonder why I thought automating everything would be easier. π
Kubernetes said desired state. I said prove it. βΈοΈ
Built my first hands-on Kubernetes application using MicroK8s on Ubuntu in WSL2, progressing from a standalone nginx Pod to a declaratively managed application with Deployments, ReplicaSets, multiple Pods, and a stable ClusterIP Service. Practiced scaling, labels and selectors, EndpointSlices, rolling updates, and desired-state reconciliation while intentionally deleting Pods to observe Kubernetes self-healing. Finished by moving the application into reusable YAML and troubleshooting an immutable Deployment selector while rebuilding the environment declaratively.
View RepositoryWordPress, MySQL, Docker Swarm, EFS... what could possibly go wrong? π
Built a multi-service WordPress and MySQL application on a three-node Docker Swarm running across AWS EC2. Used Docker Stack, overlay networking, Docker Secrets, and Amazon EFS shared storage to explore container orchestration, persistent data, service communication, and resiliency. Troubleshot networking, SSH, Docker service health, memory pressure, and storage issues while testing service recovery and worker-node rescheduling.
View RepositoryI built a Docker Swarm. Then I started killing containers. π³π
Built a three-node Docker Swarm across AWS EC2 instances to practice multi-node container orchestration, replicated and global services, scaling, self-healing, Docker Stack, overlay networking, and routing mesh. Tested resiliency by intentionally removing containers and draining a worker node to validate desired-state recovery, task rescheduling, and traffic routing across the cluster.
View RepositoryIt started with one manually deployed Jenkins server. Then I decided Terraform should do the work. π
Deployed a Jenkins server on AWS using Terraform, progressing from a manual proof of concept to reusable Infrastructure as Code. Provisioned EC2, Security Groups, and private S3 artifact storage, automated Jenkins installation with User Data, and implemented an IAM Role and Instance Profile with least-privilege S3 permissions. Validated temporary AWS credentials and tested artifact upload and download before safely destroying the Terraform-managed infrastructure.
View RepositoryWhat happens when you start deleting Jenkins containers on purpose? Turns out, quite a lot. π³π
Built and managed Jenkins in Docker while exploring container lifecycle, persistent storage, Docker Compose, and custom image creation. Tested data persistence by intentionally removing and recreating Jenkins containers, then built a custom Jenkins image using a Dockerfile and verified the customization with curl inside the running container.
View RepositorySame project. Different engineer. π³
Rebuilt one of my first Docker projects using a Dockerfile and a repeatable image build instead of manually configuring a running container. Practiced Docker image versioning, layer caching, container lifecycle management, host-to-container port mapping, networking, and inspection while running multiple versions of the application side by side. Troubleshot Docker Engine availability, port and container-name conflicts, application connectivity, and container behavior while validating each stage of the rebuild.
View RepositoryBuilding a portfolio was easy. Getting DNS, HTTPS, caching, and a custom domain to cooperate was the adventure. π
Designed and deployed this cloud engineering portfolio using Amazon S3, CloudFront, Route 53, and AWS Certificate Manager. Configured a custom domain with DNS routing and HTTPS/TLS, maintained source control through GitHub, and troubleshot deployment, caching, domain registration, DNS, and content delivery issues.
View RepositoryWhat if a GitHub push could hand work directly to generative AI? Naturally, I had to find out. π€
Built a CI/CD-style workflow using GitHub, Amazon S3, and Amazon Bedrock.
View RepositoryOne audio file went into AWS. Several services later, the cloud was speaking another language. π
Created an AWS pipeline using Amazon Transcribe, Translate, Polly, Lambda, and S3.
View RepositoryUpload an image and let AWS figure out what it is. That sounded like a perfectly reasonable experiment. π
Built an image-processing workflow using Amazon Rekognition, DynamoDB, Lambda, and S3.
View RepositoryBecause apparently reading text myself was too easy, I taught AWS to say it out loud. π
Created a serverless text-to-speech solution using Amazon Polly, Lambda, API Gateway, and S3.
View RepositoryThe goal was simple: push code and let the pipeline handle the deployment. Much nicer than clicking everything manually. π
Built and deployed a static website using Amazon S3, CloudFront, and CodePipeline.
View RepositoryNo README? No entry. Sometimes automation needs boundaries. π
Created a GitHub Actions workflow that validates required repository files and logs results to Amazon CloudWatch.
View RepositoryThe technical skills matter, but some of the best lessons happen somewhere between βthis should workβ and βwhy is THAT happening?β π
A successful deployment does not automatically mean the application actually works. I validate the environment and prove the application works too.
Troubleshooting gets easier when I understand how every service connects instead of looking at one component in isolation.
Least privilege is more meaningful when I test the permissions and verify that the application can do exactly what it needs.
Orchestration became much easier to understand when I deliberately removed workloads and watched the platform reconcile actual state back to desired state. Docker Swarm introduced the idea, and Kubernetes let me explore it through Deployments, ReplicaSets, Pods, scaling, and declarative configuration.
Containers may be disposable, but application data is not. Shared storage, database placement, and recovery behavior need to be considered as part of the architecture.
Kubernetes reinforced that healthy resources are not enough if the relationships between them are wrong. Deployment selectors, Pod labels, and Service selectors need to match for the application path to work correctly.
Building cloud resources is fun. Knowing how to safely tear them down is part of understanding the full lifecycle.
Building the project is only half the story. I also document what happened along the way: the troubleshooting, mistakes, lessons learned, and occasional βwhy is THAT happening?β moments. π
My first hands-on Kubernetes project started with a single nginx Pod and grew into Deployments, ReplicaSets, Services, scaling, self-healing, rolling updates, labels and selectors, EndpointSlices, declarative YAML, and a troubleshooting lesson involving an immutable selector.
Read on MediumA multi-service Docker Swarm adventure involving WordPress, MySQL, Amazon EFS, Docker Secrets, persistent storage, worker-node recovery, and enough troubleshooting to make things interesting. π
Read on MediumA three-node Docker Swarm adventure covering services, scaling, Docker Stack, self-healing, and what happens when you deliberately remove containers just to see whether the cluster brings them back.
Read on MediumFrom manually deploying Jenkins to reusable Infrastructure as Code, IAM role-based S3 access, environment validation, and safe Terraform cleanup.
Read on MediumA hands-on Docker and Jenkins story covering container lifecycle, persistent volumes, Docker Compose, custom Docker images, and the surprisingly useful lesson that deleting a container does not have to mean deleting your data.
Read on MediumOne of my earliest Docker projects, revisited with a very different understanding of containers. The updated story now follows the original experiment into a reproducible Dockerfile-based rebuild covering image versioning, layer caching, multiple containers, port mapping, networking, inspection, troubleshooting, and container lifecycle management.
Read on MediumA behind-the-scenes look at building and deploying this cloud engineering portfolio with Amazon S3, CloudFront, and GitHub, including the deployment, caching, and custom domain issues I troubleshot along the way.
Read on MediumA walkthrough of a multilingual AWS pipeline using Amazon Transcribe, Translate, Polly, Lambda, S3, and CloudWatch.
Read on Medium