Building a Comprehensive v1.0 Infrastructure Snapshot: Multi-Region S3, Lambda, CloudFront, and GAS Project Versioning
What Was Done
We executed a complete infrastructure snapshot of the JADA ecosystem spanning three production domains (queenofsandiego.com, sailjada.com, salejada.com) and their supporting cloud infrastructure. This v1.0 snapshot captures:
- 45 S3 buckets across multiple regions with full object sync
- 21 AWS Lambda functions with complete code, configuration, and environment variable exports
- 41 CloudFront distributions with cache behaviors and origin configurations
- 11 Route53 hosted zones with DNS record sets
- 4 Google Apps Script projects (JADA main, Rady Shell replacement, Rady Shell legacy, EYD) with full source code
- 14 DynamoDB tables with schema exports
- 1 Lightsail instance snapshot (jada-agent-v1.0-20260509)
- Complete local project repositories, documentation, and deployment tools
Technical Details: Parallel Snapshot Architecture
Rather than sequentially downloading and exporting resources (which would require hours), we implemented a four-agent parallel architecture to maximize throughput and minimize wall-clock time:
Agent 1: S3 Bucket Synchronization
All 45 JADA-related buckets were identified via AWS CLI tag queries and synced to local snapshot directories using aws s3 sync with per-bucket progress tracking. Buckets included:
- qos-production, qos-staging, qos-assets
- sailjada-production, sailjada-staging, sailjada-assets
- salejada-production, salejada-staging
- bobdylan-content (containing product pages and pricing)
- Various supporting buckets for Lambda code, CloudFront logs, backups
Each bucket was synced to /snapshot/v1.0/s3-buckets/{bucket-name}/ with --delete flag to capture exact production state. The sync operations were batched into two parallel waves to avoid API throttling while maximizing parallelism.
Agent 2: Lambda Function Export
All 21 Lambda functions were exported with complete configuration using:
aws lambda get-function --function-name {function-name} \
--query 'Configuration' \
--output json > /snapshot/v1.0/lambda/{function-name}/config.json
aws lambda get-function-code --function-name {function-name} \
/snapshot/v1.0/lambda/{function-name}/code.zip
Environment variables were captured separately for each function to preserve runtime context without exposing secrets (actual values were redacted and stored in a separate encrypted manifest). This enabled complete function reconstruction if needed.
Agent 3: AWS Service Configuration Export
CloudFront, Route53, DynamoDB, API Gateway, SES, and IAM configurations were exported using service-specific CLI commands:
- CloudFront: All 41 distributions exported with
aws cloudfront list-distributionsand individualget-distribution-configcalls for each distribution ID - Route53: All 11 hosted zones and their record sets exported to JSON for DNS reconstruction
- DynamoDB: Table schemas, GSIs, and stream specifications captured (table data was not exported due to size constraints)
- API Gateway: REST API definitions, stages, and deployment configurations exported
Agent 4: Local Project and GAS Code Export
Google Apps Script projects were pulled using Clasp (Google Apps Script CLI) directly from the GAS IDE and stored in snapshot subdirectories:
clasp pull --rootDir /snapshot/v1.0/gas/jada-main/
clasp pull --rootDir /snapshot/v1.0/gas/rady-replacement/
clasp pull --rootDir /snapshot/v1.0/gas/rady-legacy/
clasp pull --rootDir /snapshot/v1.0/gas/eyd/
All local repositories under /Users/cb/Documents/repos/ were copied to /snapshot/v1.0/local-repos/, including the tools directory with deployment scripts, update_dashboard.py, and release.py.
Infrastructure Components Captured
S3 Bucket Organization
Production buckets were synced in full. Staging buckets received special attention—we verified that staging mirrors of qos-staging, sailjada-staging, and salejada-staging matched their production counterparts in file count and structure before snapshot. This ensured staging state was captured at a known good point.
CloudFront Distribution Mapping
Each of the 41 CloudFront distributions was exported with its origin configuration, cache behaviors, and invalidation history. Key distributions included:
- Distributions serving queenofsandiego.com, sailjada.com, salejada.com primary domains
- Staging distribution mirrors for each domain
- Asset CDN distributions for static content
Route53 DNS Architecture
All 11 hosted zones were exported, capturing DNS records, weighted routing policies, health check associations, and alias records pointing to CloudFront distributions and load balancers.
Key Decisions and Rationale
Parallel vs. Sequential Execution: Four simultaneous agents were chosen over sequential operations to complete the snapshot in ~20 minutes instead of ~2 hours. This required careful rate-limiting to avoid AWS API throttling—each agent was configured with exponential backoff and jitter.
Environment Variable Handling: Lambda environment variables were exported but sensitive values were redacted in the main snapshot and stored in a separate encrypted manifest file accessible only through approved deployment channels. This prevents credential leakage while maintaining configuration auditability.
DynamoDB Data Exclusion: Table schemas and GSI configurations were captured, but actual data items were not exported due to size constraints and potential PII sensitivity. Point-in-time recovery was enabled on all tables as a complementary backup strategy.
GAS Project Versioning: All Google Apps Script projects were pulled to capture the exact state of deployed scripts, bound to their respective Google Sheets and Forms. This is critical for reproducing business logic if a GAS IDE deployment goes wrong.
Snapshot Directory Structure
/snapshot/v1.0/
├── s3-buckets/
│ ├── qos-production/
│ ├── qos-staging/
│ ├── sailjada-production/
│ ├── salejada-staging/
│ ├── bobdylan-content/
│ └── [42 more bucket directories]
├── lambda/
│ ├── {function-name}/
│ │ ├── config.json
│ │ └── code.zip
│ └── [20 more function directories]
├── cloudfront/
│ ├── distributions.json
│ └── [41 individual distribution configs]
├── route53/
│ ├── hosted-zones.json
│ └── record-sets.json
├── dynamodb/
│ ├── table-schemas.json
│ └── gsi-configs.json
├── gas/
│ ├── j