Comprehensive report — Migration ID 0611-0606 (internal run identifier) — Generated 2026-06-17
Target region: us-west-2 (from GCP us-west1) |
Draft preview — not plugin output
Go, with conditions
sf_beach_analytics) has no automated AWS mapping from this plugin — engage your AWS account team or a data partner to evaluate the best analytics migration path. Analytics costs are excluded from the estimated AWS monthly run rate until that path is defined. This does not block phased migration of compute, database, storage, and AI; BigQuery planning runs in parallel on the timeline below.
terraform/ implements the Balanced baseline only.
Combined view of recurring infrastructure and AI cloud-service costs. BigQuery is excluded from both sides. This is not a total ownership-cost model: staffing, operations, support, and migration labor are not priced.
| Category | GCP (current est.) | AWS Balanced (est.) | AWS Optimized (est.) | Monthly Δ (Balanced) |
|---|---|---|---|---|
| Infrastructure | $165 | $112 | $82 | -$53 |
| AI / ML workloads | $1,250 | $540 | $34* | -$710 |
| Total (excl. BigQuery) | $1,415 | $652 | $116* | -$763 (-54%) |
| Annual (Balanced) | $16,980 | $7,824 | — | -$9,156 |
* Optimized AI assumes Nova Lite for text + Stable Image Core for images after A/B validation (see the optimized AI projection in Appendix D).
| Category | Monthly | Source |
|---|---|---|
| Compute (Cloud Run) | $85 | preferences + inventory sizing |
| Database (Cloud SQL) | $12 | db-f1-micro dev tier |
| Storage (GCS) | $8 | beach images + build artifacts |
| Networking | $45 | egress + load balancing est. |
| Other | $15 | misc. platform services |
| Total | $165 | excludes AI and BigQuery |
5 primary GCP services detected:
Three pricing scenarios for the same mapped architecture. The generated
terraform/ implements the Balanced tier. The full
per-service breakdown is in Appendix B.
| Tier | Est. Monthly AWS | vs GCP ($165/mo) | Annual difference | vs Balanced, for this stack |
|---|---|---|---|---|
| Premium Highest resilience / highest monthly estimate |
$198 | +20% (+$33) | +$396 | RDS Multi-AZ instead of single-AZ (+$21/mo) — removes the single-AZ assumption; Fargate provisioned headroom (+$12/mo) |
| Balanced Default scenario; Terraform implements this tier |
$112 | -32% (-$53) | -$636 | — anchor; matches generated Terraform |
| Optimized Spot, reservations, storage trade-offs assumed |
$82 | -50% (-$83) | -$996 | Drops NAT Gateway (-$18/mo) — tasks move to public subnets or VPC endpoints, a posture change, not just savings; assumes a 1-year Compute Savings Plan (-$12/mo) |
Generated Terraform is Balanced on-demand (Est. $112/mo). Savings Plans and Reserved Instances are account-level purchases after you have a usage baseline. Do not add these rows on top of the Optimized tier (Est. $82/mo) — that tier already embeds illustrative Spot and 1-year Savings Plan assumptions.
| Posture | Est. monthly | vs Balanced | What you commit to |
|---|---|---|---|
| Balanced on-demand (this Terraform) | Est. $112 | — | No term commitment. Pay list hourly rates. |
| Compute Savings Plan (1-year, no upfront) | Est. $100 | −$12 | Covers Fargate after 30–90 days of Cost Explorer data. |
| Database Savings Plan (1-year, no upfront) | Est. ~20% off RDS | Typical ~20% on provisioned RDS | Mutually exclusive with RDS Reserved Instances on the same workload. |
| Optimized composite (illustrative bound) | Est. $82 | −$30 | Already includes Spot and 1-year Savings Plan assumptions. Use as a floor, not a sum of extra discounts. |
Line-level targets are in Savings Plans and Reserved Instances.
| GCP Service | AWS Service | How we chose this |
|---|---|---|
| Cloud Run | Fargate + ALB | Standard pairing |
| Cloud SQL PostgreSQL | RDS PostgreSQL db.t4g.micro | Tailored to your setup (single-AZ) |
| Cloud Storage | S3 | Standard pairing |
| BigQuery | Deferred — specialist engagement | Specialist required |
| Vertex AI / Gemini | Bedrock Claude Sonnet 5 | Tailored to your setup (quality priority) |
| Vertex AI Imagen | Bedrock Stable Image Core | Tailored to your setup |
networking_vpc_us-west1_001 — firewall rules → security groupsstorage_gcs_us-west1_001 — beach images bucketstorage_gcs_us_001 — Cloud Build artifactsdatabase_sql_us-west1_001 — Cloud SQL → RDScompute_cloudrun_us-west1_001 — Cloud Run → Fargateanalytics_bigquery_us_001| Order | Phase | Activities |
|---|---|---|
| 1 | Setup | VPC, IAM, security baseline, CI/CD for Terraform, Bedrock model access |
| 2 | PoC | Deploy networking + storage clusters; smoke test connectivity |
| 3 | Infrastructure Deployment | RDS, Fargate, ALB; cross-cluster security groups |
| 4 | Data Migration | Cloud SQL → RDS replication via Database Migration Service (DMS); GCS → S3 sync |
| 5 | Cutover | Weekly maintenance window; DNS/traffic switch |
| 6 | Validation | Cost validation; GCP teardown planning |
| Order | Phase | Activities |
|---|---|---|
| 1 | Bedrock setup | Enable model access, IAM role, provider adapter with feature flag |
| 2 | Staging validation | A/B comparison, prompt tuning, image quality review |
| 3 | Production rollout | 10% → 50% → 100% traffic; monitor cost and latency |
Duration drivers: database replication and cutover (binding), cross-cluster security groups, parallel AI evaluation per model. Stage order and go/no-go gates carry the schedule; the plugin quotes no week or hour estimates (uncalibrated).
Cutover strategy: maintenance-window-weekly | Rollback: revert DNS to GCP Cloud Run; keep RDS read replica 48h
| Risk | Severity | Mitigation |
|---|---|---|
| BigQuery AWS target not yet selected | Medium | Engage AWS account team to define the analytics migration path; does not block phased migration of compute, database, and AI |
| Database replication lag at cutover | Medium | DMS with lag monitoring; maintenance window cutover |
| Public S3 bucket security | Medium | Add CloudFront with Origin Access Identity (OAI); restrict direct S3 public access post-migration |
| Subjective image quality (Imagen → Stable Image Core) | Medium | Human eval before cutover; feature-flag rollback |
| Claude cost vs Nova Lite if quality bar lower | Medium | A/B test; model downsizing saves ~$506/mo if Nova Lite sufficient |
Assumptions applied by default — settings you never confirmed; each one shifts the numbers as described:
| Setting | Assumed value | What it decides |
|---|---|---|
| Database availability | Multi-AZ | Automatic failover; roughly 2x single-AZ database cost — confirm or compare a single-AZ scenario |
| AI priority | Balanced | Sonnet-class default model for the Bedrock mapping |
| Cloud Run traffic | Constant 24/7 | Conservative (higher) AWS compute estimate |
Confidence: Medium — some material inputs assumed. Measured: GCP billing baseline ($165/mo infra), Cloud SQL disk size (10 GB). Assumed: database availability, Cloud Run traffic pattern. Unknown: none.
Pricing provenance: Estimates based on cached AWS pricing (2026-03-07), accuracy ±5–10%. Cross-checked against the AWS Pricing Calculator for the Balanced scenario.
| Domain | Source | Confidence | Last updated |
|---|---|---|---|
| Infrastructure | Cached AWS pricing | ±5–10% | 2026-05-20 (22 days old, not stale) |
| Security baseline | Cached per-unit rates | ±25% | us-east-1 reference, 2026-05-04 |
| Observability | Heuristic volume | ±30% | Based on dev-tier assumptions |
| AI / Bedrock | Cached model rates | ±15–25% | Token volume from preferences (medium) |
billing_data_available: false)passed — fmt, init, and validate all passed.
Provider: hashicorp/aws v5.100.0. Generated stack aligns with Balanced cost tier.
Expanded sections sourced from migration JSON artifacts and generated Terraform
4 firewall rules → Security Group rules — all Standard pairing
default-allow-icmp, default-allow-internal, default-allow-rdp, default-allow-sshGCS sf-beach-app-beach-images → S3 Standard pairing
Public IAM (allUsers objectViewer) → S3 bucket policy. Tailored to your setup
GCS sf-beach-app_cloudbuild → S3 (build artifacts) Standard pairing
Recommend CodeBuild/CodePipeline for CI replacement.
Cloud SQL sf-beach-db (PostgreSQL 15, db-f1-micro, ZONAL) → RDS db.t4g.micro single-AZ Tailored to your setup
Cloud SQL client IAM → RDS IAM auth policy on ECS task role
Cloud Run sf-beach-ratings (1 vCPU, 512Mi, max 10) → Fargate + ALB Standard pairing
Service account vertex-ai-sa → IAM role (ECS task) · Vertex AI user → Bedrock invoke policy · Storage viewer → S3 read policy
Public invoker (allUsers) → internet-facing ALB.
BigQuery sf_beach_analytics / beach_ratings_history → specialist evaluates best AWS analytics path (no automated plugin mapping).
Contact AWS account team or data analytics migration partner to assess query patterns, data movement, and BI integration. Phased migration of other clusters can proceed in parallel.
| Category | AWS Service | Est. Monthly | Calculation / notes |
|---|---|---|---|
| Compute | Fargate | $22 | 1 vCPU × $0.04048 × 511 hrs + 0.5 GB × $0.004445 × 511 hrs |
| Database | RDS PostgreSQL | $14 | db.t4g.micro × 730 hrs + 10 GB storage |
| Storage | S3 Standard | $3 | Beach images + build artifacts |
| Networking | ALB + NAT Gateway | $55 | ALB $22 + NAT $33 for VPC-attached Fargate/RDS |
| Security | AWS Security Baseline (Tier 1) | $15 | GuardDuty $13 · CloudTrail S3 $1.50 · free controls $0.50 · Budgets $0 |
| Observability | CloudWatch + X-Ray | $4 | Logs $1 · storage $0.06 · metrics $3 · alarms $0 · tracing $0 (above 5 GB / 10 metric / 10 alarm free tier) |
| Supporting | Secrets Manager + ECR | $1.40 | $0.40 secrets + $1.00 ECR |
| Infra subtotal | — | $112 | Range $91–$146 (low/mid/high) |
Tier totals (Premium / Balanced / Optimized) and annual differences are in the Infrastructure Cost Comparison above. Commitment discounts are in Savings Plans and Reserved Instances.
Incremental to Balanced on-demand (Est. $112/mo). Do not add these savings onto Optimized (Est. $82/mo) — that tier already embeds reservation and Spot assumptions.
| Optimization | Target | Est. savings | Commitment | Effort |
|---|---|---|---|---|
| Compute Savings Plans | Fargate | 20–40% | 1-year no-upfront | Low (post-migration) |
| Database Savings Plans | RDS | ~20% | 1-year no-upfront | Low |
| S3 Infrequent Access | S3 build artifacts | $1/mo (38%) | None | Low |
| Fargate Spot | Fargate dev/staging | $8/mo (70%) | None | Medium |
| Model downsizing (AI) | Bedrock text | $506/mo | None | Low (after A/B test) |
| Prompt caching (Claude) | Bedrock | Workload-dependent; measure cache hits and writes | None | Low |
STARTUP_PROGRAMS.mdscripts/01-validate-prerequisites.sh --executecd terraform terraform init -backend=false terraform apply -target=aws_s3_bucket.tfstate -target=aws_dynamodb_table.tfstate_lock terraform init terraform plan terraform apply
Deploys Balanced-tier stack including baseline.tf security controls.
./scripts/02-migrate-data.sh --execute — GCS → S3, DMS for PostgreSQL./scripts/03-migrate-containers.sh --execute — GCR → ECRgeneration-infra.json./scripts/05-validate-migration.sh --execute| Track | Trigger | Action | RTO |
|---|---|---|---|
| Infrastructure | Cutover failure, data integrity issue | Revert DNS to GCP Cloud Run; RDS read replica retained 48h | Maintenance window |
| AI | Error rate >1% for 5 min; P95 >2× baseline; quality <90% | Set AI_PROVIDER=vertex_ai (feature flag) |
Instant |
| AI (critical) | Error rate >5% for 2 min | Auto-rollback to Vertex AI | <2 min |
| GCP model | Bedrock target | Workload | Complexity |
|---|---|---|---|
| gemini-2.5-flash | anthropic.claude-sonnet-5 | Text generation, structured output | Medium |
| imagen-3.0-generate-001 | stability.stable-image-core-v1:0 | Image generation (~500/mo) | Medium |
| Bedrock model | Monthly est. | vs GCP ($1,250/mo) | Quality | Notes |
|---|---|---|---|---|
| Claude Sonnet 5 (recommended) | $520 | -58% | High | Quality priority (Q16); selected target |
| Claude Haiku 4.5 | $260 | -79% | Medium-High | Balance of cost and quality |
| Nova Lite v1 | $14 | -99% | Medium | Backup if A/B test passes quality bar |
| Component | Volume | Cost |
|---|---|---|
| Input tokens | 60,000,000 / month | $120 |
| Output tokens | 40,000,000 / month | $400 |
| Images (Stable Image Core) | 500 / month | $20 |
| Total (design target) | — | $540 projected |
| Action | Detail |
|---|---|
| Files to modify | lib/gemini.ts, lib/imagen.ts, app/api/search/route.ts |
| Remove dependency | @google/genai |
| Add dependency | @aws-sdk/client-bedrock-runtime |
| Migration pattern | Direct SDK → Converse API; feature flag AI_PROVIDER |
bedrock:InvokeModel on ECS task roleAI_PROVIDER feature flagestimation-ai.json projectionQuestions and assumptions from the Clarify phase that shaped this migration plan.
| Question / assumption | Your choice | Source | Design consequence |
|---|---|---|---|
| Do you have any compliance or regulatory requirements? | None | User answer | Tier 1 security baseline only; no Config/Security Hub add-on |
| Approximately how much are you spending on GCP per month in total? | < $1K | User answer | Dev-tier sizing baseline for cost comparison |
| When can you accept downtime for cutover? | Weekly maintenance window | User answer | Phased cutover in week 3 during declared maintenance window |
| How does traffic to your Cloud Run services vary? | Active most of the day | User answer | Fargate hours estimate (~511 hrs/mo) in Balanced tier |
| What matters most for your AI workloads? | Quality | User answer | Claude Sonnet 5 recommended over lower-cost models |
| Detected: Cloud SQL ZONAL → single-AZ availability | Single-AZ | Extracted | RDS db.t4g.micro single-AZ (not Multi-AZ) |
| Detected: GCP region us-west1 | us-west-2 | Extracted | All resources deploy in us-west-2; Bedrock availability verified |
| Are you eligible for AWS startup programs? | Eligible Founders (not yet applied) | User answer | Up to $5K AWS Activate credits callout in report |
The generated terraform/baseline.tf implements an account-wide security baseline.
Costs below from estimation-infra.json → projected_costs.breakdown.security_baseline
(Balanced mid estimate: $15/mo, range $3–$30, accuracy ±25%).
| Control | Terraform resource | Monthly cost (mid) | GCP equivalent | Notes |
|---|---|---|---|---|
| IAM password policy | aws_iam_account_password_policy.baseline | $0 | Org policy (partial) | 14-char min, rotation, complexity |
| S3 account public access block | aws_s3_account_public_access_block.baseline | $0 | Org constraint | Blocks accidental public buckets account-wide |
| EBS encryption by default | aws_ebs_encryption_by_default.baseline | $0 | GCE disk encryption | Defense-in-depth for any future EBS volumes |
| IAM Access Analyzer | aws_accessanalyzer_analyzer.baseline | $0 | Policy Intelligence (partial) | External access detection on account resources |
| IMDSv2 required | aws_ec2_instance_metadata_defaults.baseline | $0 | Metadata server controls | Defense-in-depth if EC2 is added later |
| CloudTrail + S3 log bucket | aws_cloudtrail.baseline | $1.50 | Cloud Audit Logs | Multi-region trail; first trail free; S3 storage cost |
| GuardDuty | aws_guardduty_detector.baseline | $13 | Security Command Center (SCC, partial) | 30-day free trial; scales with VPC/API volume; dominant baseline cost |
| AWS Budgets | aws_budgets_budget.monthly_spend | $0 | Billing budgets | Alerts at 50%, 80%, 100% of $142/mo limit |
| Free controls subtotal | — | $0.50 | — | Misc. negligible charges |
| Security baseline total | baseline.tf |
$15 | — | Low $3 / Mid $15 / High $30 |
| Resource | Purpose |
|---|---|
| aws_iam_role.ecs_execution | ECS task execution role (image pull, logs) |
| aws_iam_role.ecs_task | Application runtime role |
| aws_iam_role_policy.ecs_task_bedrock | Scoped Bedrock invoke permissions |
| aws_iam_role_policy.ecs_task_s3 | Read-only access to beach images bucket |
| Capability | GCP (detected) | AWS (generated) | Gap / action |
|---|---|---|---|
| Network perimeter | 4 default VPC firewall rules | VPC security groups | Mapped 1:1; review default-allow-ssh/rdp — restrict in production |
| Identity & access | Service accounts + project IAM | IAM roles + scoped policies on ECS task | Least-privilege Bedrock and S3 policies generated |
| Audit logging | Cloud Audit Logs (platform default) | CloudTrail multi-region + S3 | Net-new explicit trail in baseline.tf |
| Threat detection | Security Command Center (optional/paid) | GuardDuty enabled | Net-new — $13/mo mid estimate after trial |
| Public data exposure | GCS allUsers objectViewer on beach images | S3 public read bucket policy | Risk: migrate to CloudFront + OAI post-cutover |
| Secrets management | Not detected in Terraform | Secrets Manager ($0.40/mo est.) | Add secrets migration script if app uses Secret Manager |
| Observability | Cloud Operations (50 GB logs free) | CloudWatch (~$4/mo mid) | Cost shift: GCP logging free tier is larger (50 GB vs CloudWatch 5 GB always-free); estimate assumes usage above free-tier limits (especially custom metrics) |
| Artifact | Description |
|---|---|
aws-design.json | 17 resource mappings across 6 clusters |
aws-design-ai.json | Bedrock model selection and capability mapping |
estimation-infra.json | Infrastructure cost tiers, security baseline, optimizations |
estimation-ai.json | AI model comparison and token cost breakdown |
generation-infra.json | 10-week phased plan, risks, cutover/rollback |
generation-ai.json | 3-week AI plan, code changes, monitoring, checklist |
preferences.json | Clarify phase answers and design constraints |
validation-report.json | Terraform fmt/init/validate results |
terraform/ | baseline.tf, vpc.tf, compute.tf, database.tf, storage.tf, security.tf, monitoring.tf |
scripts/ | 01 validate · 02 data · 03 containers · 05 validate migration |
ai-migration/ | provider_adapter.js, setup_bedrock.sh, test_comparison.py, bedrock_monitoring.tf |
MIGRATION_GUIDE.md | Step-by-step runbook |
STARTUP_PROGRAMS.md | AWS Activate credits guidance |
migration-report.html | This comprehensive report |
| Term | Meaning |
|---|---|
| Monthly run rate | Estimated recurring cloud-service charges; excludes staffing, support, migration labor, and other ownership costs |
| DMS | AWS Database Migration Service |
| OAI | CloudFront Origin Access Identity |
| RTO | Recovery Time Objective |
| CUD | Committed Use Discount (GCP) |
| SCC | Security Command Center (GCP) |
| IMDSv2 | EC2 Instance Metadata Service version 2 |
| P95 | 95th-percentile latency |
| RAG | Retrieval-Augmented Generation |