AWS Aurora application-fixture recovery acceptance — 2026-08-17¶
This is a bounded AWS Aurora MySQL application-fixture recovery cell. It extends the RDS control-plane path with a cluster snapshot, isolated Aurora cluster restore, restored-writer creation, a deterministic known-content fixture, restore-identity verification, application reads, permission and health probes, manifest verification, and independent post-run cleanup checks. It does not certify every AWS durable class or the full MageLift resilience matrix.
Scope¶
| Field | Value |
|---|---|
| Provider/account | Authenticated AWS account (identifier intentionally omitted) |
| Region | eu-west-3 |
| Engine | aurora-mysql (requested version 8.0.mysql_aurora.3.08.2) |
| Source class | db.t3.medium Aurora writer |
| Restore class | db.t3.medium Aurora writer |
| Ownership marker | magelift/aws/aurora-recovery/codex-aws-aurora-20260817 |
| Fixture label | fixture-rds-control-plane-codex-aws-aurora-20260817 |
| Source cluster | magelift-aurora-codex-aws-aurora-20260817 |
| Source writer | magelift-aurora-codex-aws-aurora-20260817-instance |
| Manual cluster snapshot | magelift-cluster-snapshot-9b5df85da1f04983751268bb |
| Restore cluster | magelift-cluster-restore-1790647961eb244669ea23c3 |
| Restore writer | magelift-cluster-restore-1790647961eb244669ea23c3-instance |
| DB subnet group | magelift-rds-subnet-codex-aws-aurora-20260817 |
| Temporary security group | magelift-rds-sg-codex-aws-aurora-20260817 (sg-056f8cf38c401c9df) |
| Restore duration | 539 seconds |
| Retention | 1 day |
The disposable source and restore were public only to make the local runner's
current public IPv4 address reachable. Both Aurora identities used the
temporary security group, which admitted TCP 3306 only from that /32. The
generated root credential was passed to the MySQL client through MYSQL_PWD;
it was not placed in command-line arguments or committed evidence.
Result¶
PASS.
- The source Aurora cluster became
available, encrypted, and deletion-protected. Its generated writer becameavailableand publicly reachable through the exact temporary security group. - The fixture store created the deterministic
magelift_recoverydatabase and one known row inmagelift_fixture_f6245c3ac69df25f. The row contains the ownership marker, fixture label, and fixed payloadmagelift-aws-rds-recovery-v1; the recovery manifest records that table and one expected record. - The recovery cell created an encrypted manual Aurora cluster snapshot and verified its ownership and available state before restore.
- The snapshot restored to an isolated Aurora cluster. The adapter waited for the cluster to become available, then created the restored writer with explicit public reachability and the exact temporary security group. The measured provider restore duration was 539 seconds. This follows the AWS restore model in which a cluster snapshot restore creates the cluster and a DB instance is created afterward; see the RestoreDBClusterFromSnapshot API, Aurora restore guide, and AWS CLI restore tutorial.
- The verifier resolved the restored Aurora cluster identity before querying
it. It confirmed the known row and payload, executed a temporary-table
create/insert/drop permission probe with a primary key, and ran
SELECT 1as the health probe. Manifest, application-read, permission, and health evidence all passed. - Recovery inventory contained the source cluster/writer, cluster snapshot, and isolated restore cluster/writer before teardown. The recovery cell deleted the restored writer before the restored cluster and then deleted the cluster snapshot, preserving the source cluster and its writer until wrapper cleanup.
- The wrapper disabled deletion protection only after exact ownership checks, deleted the source writer and cluster, removed the subnet group, and removed the temporary security group. It exited successfully after exact marker cleanup.
- Independent post-run queries returned provider not-found responses for the source cluster/writer, restore cluster/writer, cluster snapshot, DB subnet group, and temporary security group.
Observed command result, with no credential or account identifier:
AWS Aurora database recovery acceptance PASS profile=default region=eu-west-3 source=aws-rds://cluster/magelift-aurora-codex-aws-aurora-20260817 backup=aws-rds://cluster-snapshot/magelift-cluster-snapshot-9b5df85da1f04983751268bb restore=aws-rds://cluster/magelift-cluster-restore-1790647961eb244669ea23c3 restoreDurationSeconds=539 retentionDays=1 cleanup=verified applicationFixture=verified manifest=verified reads=verified permissions=verified health=verified
AWS database recovery acceptance source, restore, snapshot, and subnet group were cleaned through exact ownership marker=magelift/aws/aurora-recovery/codex-aws-aurora-20260817 sourceKind=cluster
Independent cleanup evidence:
DBClusterNotFoundFault: magelift-aurora-codex-aws-aurora-20260817
DBInstanceNotFound: magelift-aurora-codex-aws-aurora-20260817-instance
DBClusterNotFoundFault: magelift-cluster-restore-1790647961eb244669ea23c3
DBInstanceNotFound: magelift-cluster-restore-1790647961eb244669ea23c3-instance
DBClusterSnapshotNotFoundFault: magelift-cluster-snapshot-9b5df85da1f04983751268bb
DBSubnetGroupNotFoundFault: magelift-rds-subnet-codex-aws-aurora-20260817
EC2 security-group inventory: []
Failed-run record and design corrections¶
The final PASS followed bounded failed cells. Each mutating attempt was cleaned through its exact ownership marker; the failures are retained because they exposed provider-specific behavior or an incorrect cluster assumption:
- The first Aurora preflight generated a password longer than Aurora's 41-character limit. AWS rejected it before cluster creation; the wrapper now truncates the run identity while retaining a disposable unique credential.
- The next attempt passed deletion protection to
CreateDBInstance. AWS rejected instance-level deletion protection for a cluster member and required protection at the cluster level. Member-level deletion protection was removed; the source and network resources were independently cleaned. - The following run reached cleanup, where native cleanup tried
ModifyDBInstance --no-deletion-protectionon an Aurora member. AWS rejected that operation because deletion protection is cluster-scoped. Native cleanup now describes cluster membership, skips the invalid instance modification, deletes members before clusters, and preserves the source cluster's tagged members. A fake Aurora regression test covers this ordering and preservation. - The next run completed the restore and application verification but failed
its final assertion because a cluster source correctly appeared in
inventory as both
aws-rds://cluster/<source>and its writeraws-rds://instance/<member>. Cleanup verification now derives the allowed source-member identities from the preserved cluster instead of requiring one source identity. That correction produced the PASS above.
Implementation boundary and non-claims¶
cmd/aws-database-recovery-acceptance now accepts --source-kind cluster,
resolves the Aurora cluster endpoint, drives the shared
internal/certification.DatabaseRecoveryCell, and verifies cluster-aware
cleanup. internal/cloud/aws/resilience translates Aurora cluster snapshots
and writer creation through the AWS SDK boundary, applies restore network
settings, and performs member-before-cluster ownership cleanup. The local
wrapper creates and owns the temporary network boundary and source lifecycle.
This proves one known-content Aurora MySQL fixture in eu-west-3. It does not
prove a Magento dump, Magento HTTP health, restore-in-place, cross-region or
regional DR, HA failure, fencing/failback, corruption recovery,
credential-loss recovery, interrupted-teardown recovery, production retention
variants, or an application RPO/RTO. The 539-second value is the provider
restore duration for this run, not an application RTO or RPO measurement.
AWS RDS instance, Aurora, S3, Secrets Manager, SQS, observability, edge, and
other durable or runtime classes remain separate evidence boundaries.
AWS's Aurora cluster creation guide and Aurora encryption documentation describe the cluster/member and encryption boundaries exercised here. The requested version was checked against AWS's Aurora MySQL version documentation before mutation.
Tasks 3.3, 3.5, and 8.5 remain open for broader durable-class, restore-in-place, HA, DR, retention, and failure-scenario requirements.