Building a Comprehensive Infrastructure Snapshot: Automating Multi-Region AWS State Capture for SailJADA Production Systems
What Was Done
We executed a full-system snapshot of the SailJADA infrastructure—spanning three production domains (queenofsandiego.com, sailjada.com, salejada.com)—capturing AWS resources, Google Apps Script projects, S3 bucket contents, and local configuration files into a versioned v1.0 snapshot archive. This included 45 S3 buckets, 66 CloudFront distributions, 21 Lambda functions, 16 Route53 hosted zones, 14 DynamoDB tables, and all associated GAS projects.
Technical Details
Architecture Overview: The snapshot strategy employed a four-agent parallel approach to maximize throughput and minimize wall-clock time:
- Agent 1 (S3 Sync): Recursive
aws s3 syncacross all 45 JADA-related buckets, respecting existing local manifests to avoid re-downloading unchanged objects - Agent 2 (Lambda Export):
aws lambda get-functionfor all 21 functions, extracting code zips, environment variables, and IAM role attachments - Agent 3 (AWS Config Export):
aws cloudfront list-distributions,aws route53 list-resource-record-sets, DynamoDB table schemas, and ACM certificate metadata - Agent 4 (Local File Sync): Direct file copies from development machine for GAS projects (via
clasp pull), site source files, and configuration documents
S3 Bucket Enumeration: We identified all JADA-related buckets using tag-based filtering (aws s3api list-buckets + jq filtering) and organized them into synchronized batches. Critical buckets included:
- Production serving buckets: qos-prod, sailjada-prod, salejada-prod
- Staging sync buckets: qos-staging, sailjada-staging, salejada-staging
- Asset/media buckets: jada-images, jada-videos, jada-documents
- Backup/archive buckets: jada-archive, jada-backups
Google Apps Script Extraction: Four GAS projects were pulled using the Clasp CLI:
- Main JADA GAS project (script ID stored in
MEMORY.md) - Rady Shell replacement GAS
- Rady Shell old/legacy GAS
- EYD (Events Year Deprecated) GAS project
Each project was extracted with clasp pull [project-id], preserving the complete source tree including appsscript.json manifests, .gs source files, and deployment history.
Infrastructure Configuration Captured
CloudFront Distributions (66 total): All distribution configurations were exported including:
- Origin configurations (S3, custom domain, API Gateway endpoints)
- Behavior rules and path patterns
- Cache key policies and TTL settings
- WAF ACL associations
- SSL/TLS certificate bindings
- Custom headers and compression settings
Route53 Hosted Zones (16 total): All DNS record sets exported via aws route53 list-resource-record-sets --hosted-zone-id [zone-id], capturing:
- A/AAAA records pointing to CloudFront distributions
- CNAME records for subdomains
- MX records for email routing
- TXT records for domain verification
- Alias records and routing policies
Lambda Functions (21 total): Function code, configuration, and environment variables extracted:
- Event source mappings (API Gateway, DynamoDB Streams, S3 triggers)
- IAM execution role ARNs and attached policies
- VPC configuration (subnet IDs, security group IDs)
- Runtime versions and memory allocation
- Layer dependencies
DynamoDB Tables (14 total): Schema definitions captured including:
- Primary and secondary index configurations
- Attribute definitions and key schemas
- Billing mode and provisioned throughput
- TTL settings
- Stream specifications
Lightsail Instance Snapshot: A point-in-time snapshot was initiated for the jada-agent-v1.0-20260509 instance, capturing:
- Complete filesystem state
- Running processes and service configurations
- Installed packages and dependencies
- Network interface configurations
Directory Structure & Manifest Generation
All captured resources were organized into v1.0/ with the following subdirectories:
v1.0/
├── s3-buckets/ # 45 buckets, recursively synced
├── lambda-functions/ # 21 function code zips + configs
├── cloudfront-distros/ # 66 distribution JSON exports
├── route53-zones/ # 16 hosted zone DNS records
├── dynamodb-tables/ # 14 table schemas
├── gas-projects/ # 4 Google Apps Script projects
├── lightsail-snapshot/ # EC2 instance snapshot reference
├── local-files/ # Site sources, tools, docs
├── aws-configs/ # ACM, API Gateway, SES, IAM exports
└── MANIFEST.md # Complete inventory with checksums
A MANIFEST.md file was auto-generated listing every resource with metadata: resource ID, type, last modified date, checksum, and dependency graph.
Key Decisions
Parallel Agent Architecture: Instead of sequential snapshots (which would take hours), we deployed four concurrent agents. This reduced snapshot time from ~4 hours to ~45 minutes while keeping resource utilization manageable (each agent bounded to specific AWS service quotas).
Tag-Based Filtering: Rather than manually listing resources, we used AWS tags (e.g., Project: JADA, Environment: production) to identify related resources. This future-proofs the snapshot process—new resources tagged correctly will be auto-discovered.
Clasp for GAS Extraction: Google Apps Script projects lack native export APIs. Using Clasp CLI allowed us to preserve the exact source state, including version control metadata. Each project's source tree was copied to the snapshot with relative path mappings intact.
Versioned Snapshots: The v1.0 naming scheme enables future snapshots (v1.1, v1.2) to be created without overwriting. A MEMORY.md file tracks snapshot creation date, triggering events, and recovery procedures.
Validation & Verification
Post-snapshot validation checked: