Series: DevOps Project Series
Part: 3 of 3
GitHub Repo: https://github.com/khatri11-cloud/go-devops-platform\

Introduction

At the end of Part 2, my Go application was running perfectly inside a Docker container. The problem was that it still lived on my laptop. The final step was taking it from localhost to the cloud using Terraform and Microsoft Azure.

Why Azure?

Although I hold the AWS Solutions Architect – Associate (SAA-C03) certification, I chose Azure for this project for a practical reason. I had already used the AWS credits available to me, so Azure became the platform where I could continue learning without interruption. More importantly, I wanted to focus on cloud concepts that transfer across providers: containers, registries, Infrastructure as Code, and deployments.

{width=“6.0in” height=“3.275in”}

Planning the Deployment

Before writing Terraform, I mapped a simple workflow: Go application → Docker image → Azure Container Registry → Azure Container Instance → Public Internet. Breaking the project into stages made it easier to understand each component's responsibility.

Preparing Azure

I installed the Azure CLI, authenticated with my account, and confirmed the correct subscription before running Terraform. Did login to azure using az login.

{width=“3.942007874015748in” height=“3.4252963692038496in”}

Infrastructure as Code

Instead of creating resources manually, I defined a Resource Group, Azure Container Registry, and Azure Container Instance in Terraform. This meant the infrastructure could be recreated consistently from code.

A Small Surprise

During my first Terraform run, provider registration took much longer than expected. I interrupted it, assuming it had frozen. After reading the output and trying again, I realized Terraform was performing a normal initialization task. It reminded me that understanding the tools is just as important as using them.

{width=“4.8337521872265965in” height=“0.975084208223972in”}
{width=“6.0in” height=“0.9159722222222222in”}

Publishing the Container

After creating Azure Container Registry, I tagged my Docker image and pushed it to ACR. This helped me understand that Azure Container Instances pull images from a registry rather than directly from my local machine.

{width=“6.0in” height=“1.351388888888889in”}

Deployment

Terraform provisioned the Azure Container Instance, pulled the image from ACR, and assigned a public FQDN. Opening that URL and seeing my Go application running outside localhost was the highlight of the project.
{width=“5.017101924759405in” height=“1.3084470691163606in”}

Public Endpoint

prajwal-devops-platform.eastus.azurecontainer.io

Lessons Learned

This project changed how I think about software delivery. Go built the application, Docker packaged it, Azure Container Registry stored it, Terraform created the infrastructure, and Azure Container Instances ran it. The biggest lesson wasn't memorizing commands—it was understanding how these technologies work together.

What's Next?

The next step is to build on this foundation by introducing GitHub Actions for CI/CD, monitoring with Prometheus and Grafana, and more production-oriented DevOps practices.