Back to articles
Technology Insight

Optimizing Cloud Development: Utilizing OpenTofu and LocalStack for Cost-Effective AWS Simulation on a Single Cheap VPS

June 3, 2026

Introduction: The Cost and Complexity of Modern Cloud Infrastructure

In the contemporary DevOps landscape, provisioning cloud infrastructure has become synonymous with utilizing Infrastructure as Code (IaC) tools like Terraform or OpenTofu. However, deploying these configurations directly to cloud providers such as Amazon Web Services (AWS) for testing purposes introduces a distinct set of challenges. Developing, iterating, and testing IaC scripts directly in a live cloud environment inherently incurs financial costs, introduces latency due to cloud provisioning times, and presents potential security risks if misconfigured.

For small-to-medium enterprises (SMEs), startups, and independent engineering teams, maintaining dedicated AWS staging environments for every developer or branch is economically unfeasible. Fortunately, a powerful paradigm shift known as "local-first cloud development" addresses this exact challenge. By combining OpenTofu, the open-source fork of Terraform, with LocalStack, a cloud service emulator that runs locally, engineers can replicate an AWS environment entirely on a single, low-cost Virtual Private Server (VPS). This article provides an architectural overview and a step-by-step methodology to implement this cost-effective, high-efficiency testing paradigm.

The Core Technologies: OpenTofu and LocalStack

What is OpenTofu?

OpenTofu is a community-driven, open-source infrastructure-as-code tool formed as a response to Terraform's licensing changes. It allows engineers to define, preview, and deploy cloud infrastructure using the familiar HashiCorp Configuration Language (HCL). Because OpenTofu maintains strict backward compatibility with Terraform providers, it acts as a drop-in replacement, ensuring that your infrastructure definitions remain open, transparent, and completely free from vendor lock-in.

What is LocalStack?

LocalStack is a highly functional local cloud stack that replicates core AWS services directly on a local machine or a remote host via Docker. It provides a localized testing environment that mimics the behavior, APIs, and functionality of AWS services such as Amazon S3, AWS Lambda, Amazon DynamoDB, Amazon SQS, and API Gateway. By intercepting API requests intended for AWS, LocalStack executes them locally, eliminating execution costs, reducing feedback loops to milliseconds, and operating entirely offline or within an isolated network.

Architectural Overview: Simulating AWS on a Low-Cost VPS

To establish a remote, shared, or automated testing playground, deploying OpenTofu and LocalStack onto a single, budget-friendly VPS (such as a basic instance from DigitalOcean, Linode, or Hetzner) provides an elegant solution. Instead of developers running resource-heavy Docker containers on their local workstations, a centralized VPS serves as the dedicated emulation server.

In this architecture, LocalStack runs as a containerized service inside Docker on the VPS, exposing standard AWS API endpoints (typically mapped to port 4566). OpenTofu is executed either on the same VPS or from a developer's machine, with its provider configuration explicitly overridden to point to the LocalStack endpoint rather than the actual AWS cloud endpoints.

Architectural Principle: By isolating the execution environment to a VPS, development teams can leverage automated Continuous Integration (CI) runners to continuously test infrastructure code changes without risking live cloud assets or consuming AWS free-tier quotas.

Step-by-Step Implementation Guide

Step 1: Preparing the VPS Environment

First, ensure your cheap VPS (running an enterprise Linux distribution such as Ubuntu 22.04 LTS or newer) has Docker and Docker Compose installed. Execute the following commands to update the system and initialize the Docker daemon:

sudo apt-get update
sudo apt-get install -y docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker

Step 2: Configuring LocalStack via Docker Compose

Create a dedicated directory for your infrastructure testing platform and define a docker-compose.yml file to spin up LocalStack. This configuration maps the default LocalStack port and defines the services we intend to emulate.

version: "3.8"

services:
  localstack:
    container_name: localstack_main
    image: localstack/localstack:latest
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Edge Port
      - "127.0.0.1:4510-4559:4510-4559"  # External services port range
    environment:
      - SERVICES=s3,dynamodb,apigateway,lambda,iam
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - "./localstack:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

Run docker-compose up -d to start the LocalStack container. The system will pull the latest image and expose the AWS mock services locally on port 4566.

Step 3: Pointing OpenTofu to LocalStack

To instruct OpenTofu to use LocalStack instead of the real AWS cloud, you must configure the AWS provider block within your HCL code. This is achieved by defining the endpoints block for every service you intend to deploy. Create a file named main.tf:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
} 

provider "aws" {
  access_key                  = "mock_access_key"
  secret_key                  = "mock_secret_key"
  region                      = "us-east-1"
  s3_use_path_style           = true
  skip_credentials_validation = true
  skip_metadata_api_check     = true
  skip_requesting_account_id  = true

  endpoints {
    s3       = "http://localhost:4566"
    dynamodb = "http://localhost:4566"
    iam      = "http://localhost:4566"
    lambda   = "http://localhost:4566"
  }
} 

resource "aws_s3_bucket" "test_bucket" {
  bucket = "my-simulation-bucket"
}

resource "aws_dynamodb_table" "test_table" {
  name           = "DevTable"
  billing_mode   = "PAY_PER_REQUEST"
  hash_key       = "ID"

  attribute {
    name = "ID"
    type = "S"
  }
}

Step 4: Executing the Infrastructure Simulation

With the HCL code properly mapped to the local endpoints, you can now initialize and apply your OpenTofu configurations exactly as you would in a production environment:

  1. Initialize the working directory: Run tofu init to download the necessary AWS provider plugins.
  2. Validate the configuration: Run tofu validate to guarantee syntactical correctness.
  3. Generate an execution plan: Run tofu plan to observe the resources LocalStack will simulate.
  4. Apply the changes: Run tofu apply -auto-approve to provision the mock S3 bucket and DynamoDB table.

The execution completes almost instantly, without generating a single cent of liability on an AWS billing invoice.

Strategic Advantages of this Approach

    >
  • Uncompromising Cost Efficiency: A standard VPS costs a fraction of the price of multiple AWS staging environments. Organizations can run thousands of infrastructure tests monthly for a flat, predictable monthly VPS fee.
  • Enhanced Development Velocity: Because resources are simulated locally via Docker, resource creation and destruction happen in seconds rather than minutes. This rapid feedback loop allows developers to iterate rapidly on complex IAM policies, serverless functions, and database schemas.
  • Sandbox Security and Guardrails: Testing complex infrastructure updates directly on cloud providers carries the risk of accidental public exposures (e.g., exposing an S3 bucket). LocalStack limits the blast radius to an isolated virtual machine, completely eliminating data leakage concerns during the pre-production phase.

Conclusion: Shifting Left with OpenTofu and LocalStack

Integrating OpenTofu and LocalStack on a single, inexpensive VPS is a highly pragmatic design pattern for modern engineering teams aiming to optimize their DevOps workflows. It bridges the gap between infrastructure definition and safe execution, allowing developers to validate, experiment, and confidently break things without real-world consequences. By implementing this architecture, your organization can effectively "shift left" its cloud infrastructure validation, ensuring that code reaching production is robust, fully tested, and entirely verified.

Optimizing Cloud Development: Utilizing OpenTofu and LocalStack for Cost-Effective AWS Simulation on a Single Cheap VPS | DPTCloud