Hybrid Cloud & Multi-Cloud Resource Management Using Terraform (AWS, Azure, GCP)

Hybrid Cloud & Multi-Cloud Resource Management Using Terraform (AWS, Azure, GCP)

Introduction

In today’s cloud landscape, organizations often adopt Hybrid Cloud (mix of on-premise and cloud) or Multi-Cloud (using multiple cloud providers) strategies to enhance resilience, avoid vendor lock-in, and optimize costs. Managing infrastructure across multiple cloud providers can be complex, but Infrastructure as Code (IaC) tools like Terraform provide a unified approach to provisioning and managing resources across AWS, Azure, and GCP.

In this blog, we’ll walk through setting up and deploying one virtual machine (VM) in AWS, Azure, and GCP using Terraform.


Why Use Terraform for Multi-Cloud Resource Management?

Terraform simplifies multi-cloud resource provisioning with:

  • Declarative Configuration: Define infrastructure as code.

  • Provider-Agnostic Framework: Supports AWS, Azure, GCP, and more.

  • State Management: Tracks deployed infrastructure.

  • Automation: Easily modify or destroy infrastructure.

By using Terraform, organizations can maintain consistent provisioning across multiple cloud environments while reducing manual effort and configuration drift.


Prerequisites

To follow this guide, ensure you have:

  1. Terraform Installed: Download Terraform

  2. Cloud CLI Tools Installed & Configured:

    • AWS CLI: aws configure

    • Azure CLI: az login

    • GCP CLI: gcloud auth login

  3. Service Account / IAM Credentials

    • AWS: IAM user with EC2 permissions

    • Azure: Service Principal

    • GCP: Service Account with Compute permissions


Configuring Terraform for Multi-Cloud Deployment

Terraform requires provider configurations for each cloud platform. Below is an optimized main.tf file that provisions one VM in AWS, Azure, and GCP.

Step 1: Define Providers

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
    google = {
      source  = "hashicorp/google"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  region = "us-east-1"
}

provider "azurerm" {
  features {}
  subscription_id = "<your-subscription-id>"
}

provider "google" {
  project = "<your-project-id>"
  region  = "us-central1"
}

Step 2: Create Virtual Machines in Each Cloud

AWS EC2 Instance

resource "aws_instance" "aws_vm" {
  ami           = "ami-0c55b159cbfafe1f0"  # Amazon Linux AMI
  instance_type = "t2.micro"
}

Azure Virtual Machine

resource "azurerm_virtual_machine" "azure_vm" {
  name                = "azure-vm"
  location            = "East US"
  resource_group_name = "my-resource-group"
  vm_size             = "Standard_B1s"
}

GCP Compute Instance

resource "google_compute_instance" "gcp_vm" {
  name         = "gcp-instance"
  machine_type = "f1-micro"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
}

Executing Terraform Commands

Step 1: Initialize Terraform

terraform init

This downloads required providers and initializes the Terraform working directory.

Step 2: Plan Deployment

terraform plan

This generates a preview of the resources Terraform will create.

Step 3: Apply the Configuration

terraform apply -auto-approve

This deploys VMs in AWS, Azure, and GCP.

Step 4: Destroy Resources (Optional)

terraform destroy -auto-approve

This removes all deployed resources.


Managing Multi-Cloud Terraform State

Terraform maintains a state file (terraform.tfstate) to track deployed resources. For a multi-cloud setup, store this remotely to prevent conflicts.

  • AWS: S3 with DynamoDB locking

  • Azure: Azure Storage Account

  • GCP: Google Cloud Storage (GCS)

Example: Storing Terraform State in AWS S3

terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "multi-cloud/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-lock"
  }
}

Best Practices for Multi-Cloud Terraform Deployment

  1. Use Separate Workspaces

    • Manage environments (dev, prod) with Terraform workspaces.
    terraform workspace new dev
  1. Modularize Code

    • Use Terraform modules for reusability.
  2. Leverage Automation

    • Integrate Terraform with GitHub Actions or Jenkins for automated deployments.
  3. Implement Security Best Practices

    • Use IAM roles instead of hardcoded credentials.

    • Store secrets securely in AWS Secrets Manager or Azure Key Vault.


Conclusion

In this guide, we explored how to manage multi-cloud infrastructure using Terraform by deploying VMs across AWS, Azure, and GCP. This approach enables organizations to maintain flexibility, resilience, and cost efficiency across different cloud providers.

Next Steps:

✅ Scale this to deploy databases and networks across clouds.
✅ Automate provisioning using CI/CD pipelines.
✅ Explore Terraform Cloud for better collaboration.

🔹 Have any questions or suggestions? Drop a comment below! 🚀