Table of Contents
Overview
Drift is Ataiva’s next-generation Infrastructure-as-Code platform that solves the common pain points of existing IaC tools — brittle state files, drift surprises, and complex multi-cloud orchestration — by offering a stateless, DAG-driven execution engine with real-time reconciliation and human-friendly CLI workflows.
Key Features
- Stateless Execution: No centralized state files - infrastructure state is inferred from cloud provider APIs
- Real-time Drift Detection: Continuous reconciliation with optional auto-healing
- DAG-based Orchestration: Parallel execution with intelligent dependency resolution
- Human-centric CLI: Clean, readable output with comprehensive change summaries
- Expression Language: Support for loops, conditionals, and variables in YAML
- Policy-as-Code: Built-in security and governance policy enforcement
- Module System: Reusable infrastructure components with local module support
- Multi-cloud Ready: Extensible provider system (AWS production-ready, Kubernetes planned)
Production Ready
Drift is production-ready for AWS infrastructure management with:
Core Infrastructure Engine
- Complete stateless execution with AWS API integration
- Real-time drift detection and auto-healing
- DAG-based parallel execution with dependency resolution
- Comprehensive error handling and retry logic
AWS Provider (Production Ready)
- S3 Buckets: Full lifecycle management with versioning and tagging
- EC2 Instances: Complete instance management with state tracking
- VPC Networking: VPC, subnet, internet gateway, and security group management
- Lambda Functions: Serverless function deployment and management
- Database Services: RDS instances and DynamoDB tables with full configuration
- API Gateway: REST API management for serverless architectures
- IAM Resources: Complete IAM user, role, and policy management with tagging
- Resource Validation: Comprehensive validation for all resource types
Policy-as-Code (Production Ready)
- Built-in security policies (S3 versioning, resource tagging)
- Governance policies (environment tagging, cost optimization)
- Severity-based enforcement (errors, warnings, info)
- Real-time policy evaluation during bootstrap
Enterprise Features
- Module system for reusable infrastructure components
- Expression language with conditionals and loops
- Comprehensive CLI with human-readable output
- Full test coverage with integration testing
Installation
Download Binary (Recommended)
Download the latest release for your platform:
- Linux (x64): drift-linux-amd64
- Linux (ARM64): drift-linux-arm64
- macOS (Intel): drift-darwin-amd64
- macOS (Apple Silicon): drift-darwin-arm64
- Windows (x64): drift-windows-amd64.exe
After downloading, make the binary executable and move it to your PATH:
# Linux/macOS
chmod +x drift-*
sudo mv drift-* /usr/local/bin/drift
# Verify installation
drift --version
Build from Source
# Clone the repository
git clone https://github.com/ataiva-software/drift.git
cd drift
# Build the binary
go build -o drift .
# Install globally (optional)
go install .
Quick Start
1. Create a configuration file (infra.yaml)
project: my-app
environment: dev
variables:
  region: us-east-1
  tags:
    owner: platform-team
    purpose: demo
    Environment: dev  # Required by policy
providers:
  aws:
    region: "${region}"
    profile: default
resources:
  # S3 bucket with versioning (policy compliant)
  - kind: aws:s3:bucket
    name: my-app-logs
    properties:
      versioning: true  # Required by policy
      tags:
        owner: platform-team
        purpose: demo
        Environment: dev  # Required by policy
    driftPolicy:
      autoHeal: true
      notifyOnly: false
  # RDS database
  - kind: aws:rds:instance
    name: my-app-db
    properties:
      db_instance_class: db.t3.micro
      engine: mysql
      engine_version: "8.0"
      db_name: myapp
      master_username: admin
      master_user_password: "ChangeMe123!"
      allocated_storage: 20
      backup_retention_period: 1
      tags:
        owner: platform-team
        purpose: demo
        Environment: dev  # Required by policy
    driftPolicy:
      autoHeal: true
      notifyOnly: false
  # Multiple EC2 instances using count
  - kind: aws:ec2:instance
    name: web-${index}
    count: 2
    properties:
      instance_type: t3.micro
      ami: ami-0abcdef1234567890
      tags:
        Name: "web-${index}"
        Environment: "${environment}"
        owner: "${tags.owner}"
    driftPolicy:
      autoHeal: true
      notifyOnly: false
    depends_on:
      - "aws:rds:instance.my-app-db"
  # IAM user for application access
  - kind: aws:iam:user
    name: app-service-user
    properties:
      path: "/applications/"
      tags:
        owner: platform-team
        purpose: application-access
        Environment: dev  # Required by policy
    driftPolicy:
      autoHeal: true
      notifyOnly: false
2. Bootstrap your environment
drift bootstrap
3. Preview changes
drift preview
4. Apply changes
drift commit
5. Monitor and align drift
drift align --once
CLI Commands
| Command | Description | 
|---|---|
| bootstrap | Install providers, pull modules, and validate configuration | 
| preview | Preview changes and detect drift (dry-run) | 
| commit | Apply infrastructure changes | 
| align | Continuously reconcile drift | 
| dismantle | Destroy infrastructure resources | 
Command Options
# Bootstrap
drift bootstrap --config infra.yaml
# Preview with JSON output
drift preview --output json
# Commit with DAG visualization
drift commit --graph --auto-approve
# Continuous alignment
drift align --interval 10m
# One-time alignment
drift align --once
# Destroy infrastructure
drift dismantle --auto-approve
Supported Resources
AWS Provider (13 Resource Types)
| Resource Type | Kind | Properties | 
|---|---|---|
| Storage | ||
| S3 Bucket | aws:s3:bucket | versioning,tags | 
| Compute | ||
| EC2 Instance | aws:ec2:instance | instance_type,ami,tags | 
| Lambda Function | aws:lambda:function | runtime,handler,role,code_content,timeout,memory_size,tags | 
| Networking | ||
| VPC | aws:ec2:vpc | cidr_block,tags | 
| Subnet | aws:ec2:subnet | vpc_id,cidr_block,availability_zone,tags | 
| Internet Gateway | aws:ec2:internet_gateway | tags | 
| Security Group | aws:ec2:security_group | description,vpc_id,ingress,egress,tags | 
| Database | ||
| RDS Instance | aws:rds:instance | db_instance_class,engine,engine_version,db_name,master_username,master_user_password,allocated_storage,backup_retention_period,tags | 
| DynamoDB Table | aws:dynamodb:table | hash_key,range_key,attributes,tags | 
| API & Integration | ||
| API Gateway | aws:apigateway:rest_api | description,tags | 
| Security & Identity | ||
| IAM User | aws:iam:user | path,tags | 
| IAM Role | aws:iam:role | assume_role_policy,path,description,tags | 
| IAM Policy | aws:iam:policy | policy,path,description,tags | 
Why Drift?
Traditional IaC Problems
- State File Hell: Brittle state files that get corrupted or out of sync
- Locking Issues: Teams blocked by state locks
- Drift Surprises: Manual changes go undetected until next deployment
- Complex Setup: Remote state backends, locking mechanisms, team coordination
Drift Solutions
- Stateless Design: No state files to manage or corrupt
- Real-time Detection: Continuous monitoring of infrastructure drift
- Auto-healing: Automatically fix drift when detected
- Team-friendly: Multiple users can run simultaneously without conflicts
- Human-centric: Clear, readable output and intuitive commands
Documentation
- GitHub Repository - Source code and issues
- Getting Started Guide - Step-by-step tutorial
- API Reference - Complete CLI command reference
- Configuration Reference - YAML configuration guide
- Examples - Real-world use cases and patterns
License
Drift is open source software licensed under the MIT License.
Built with ❤️ by Ataiva Software