# C8g → C9g canary checklist

Run in a **non-production** account first. Assumes Amazon Linux 2023 or Ubuntu 22.04+ on Graviton4 (`c8g`) today. For general-purpose fleets use the [M8g→M9g checklist](../m9g-graviton5/m8g-to-m9g-canary-checklist.md) instead.

Source: [Amazon EC2 C9g and C9gd GA (June 30, 2026)](https://aws.amazon.com/blogs/aws/amazon-ec2-c9g-and-c9gd-instances-powered-by-aws-graviton5-processors-are-now-available/).

## Pre-flight (30 minutes)

- [ ] Confirm target Region is GA for C9g: `us-east-1`, `us-east-2`, `us-west-2`, or `eu-central-1`.
- [ ] Confirm workload is **CPU-bound** (batch, encode, HPC, CPU ML inference, agentic CPU loops). If balanced app/API, canary **M9g** instead.
- [ ] Export baseline from CloudWatch: `CPUUtilization`, application p95 latency (ALB target or APM), and (for ECS) `CPUReservation` / task count.
- [ ] Snapshot launch template / ASG / ECS capacity provider config; note AMI ID and `uname -m` (`aarch64` expected).
- [ ] Grep container manifests for `platform: linux/amd64` — rebuild multi-arch if found.
- [ ] Decide **C9g** (EBS) vs **C9gd** (local NVMe scratch). C9gd data is lost on stop/terminate.

## Canary deploy (same day)

- [ ] Launch **one** C9g instance matching C8g size (e.g. `c8g.xlarge` → `c9g.xlarge`) in the same VPC/subnet/AZ — or register one C9g into the ECS capacity provider at **5–10%** weight.
- [ ] Attach to target group at **5–10%** weight OR run synthetic load only (`hey`, `k6`, `vegeta`) against the canary.
- [ ] Run application smoke tests: auth, DB read/write, any native `.so` / JNI paths, encode/batch job paths if applicable.
- [ ] Compare **requests/sec per vCPU** (or jobs/hour) and **p95 latency** vs C8g control for ≥ 1 hour at representative load.

## Rollback triggers (stop canary if any fire)

- [ ] p95 latency **&gt; 15%** worse than C8g control at equal CPU utilization.
- [ ] Unexpected `Illegal instruction` / `SIGILL` in app logs (native x86 artifact on ARM).
- [ ] EBS throughput saturation that **C9gd** local NVMe would fix — re-evaluate sub-family instead of aborting Graviton5.
- [ ] ECS tasks stranded / capacity provider cannot place tasks on the canary instance size.

## Promote or park (end of week)

- [ ] If canary wins: update launch template / capacity provider default to C9g; keep C8g at 0% for 48h rollback.
- [ ] Tag canary instances `MigrationWave=c9g-canary` for Cost Explorer filter.
- [ ] Schedule RI/SP review — do not buy C8g commitments after a successful C9g canary.
- [ ] Document outcome in optimization backlog (see [post-migration FinOps handoff template](../post-migration-finops-handoff/optimization-backlog-template.csv)).
- [ ] Architecture reference: [ECS C9g capacity-provider diagram](./ecs-c9g-capacity-provider.drawio).
