Repository navigation
Migration analysis: ElastiCache Serverless readiness checks #570
Description
Problem
AWS launched online migration into ElastiCache Serverless for Valkey on 2026-10-21. Its prerequisites page lists source conditions that fail a migration, several of them mid-flight and permanently (a failed AWS migration cannot be restarted, only force-completed). AWS checks some at prepare time and none before the user has provisioned billed migration nodes. BetterDB's Community-tier analysis already samples the source and could tell the user before they start, whether they end up using our execution or AWS's.
Proposal
Add a serverless_readiness category to compatibility-checker.ts, emitted when the target connection is detected as ElastiCache Serverless (the AWS_SERVERLESS agent flag, or an endpoint matching *.serverless.*.cache.amazonaws.com), and also exposable as a standalone "check this source against ElastiCache Serverless" option with no target selected. Checks, with the AWS limit each maps to:
| Check | Severity | AWS rule |
|---|---|---|
| Any sampled key name > 4 KiB | blocking | Key name limit; fails the initial load and cannot be restarted |
used_memory > 32 GB on any source master |
blocking | Memory per node limit |
| More than 166 masters | blocking | Shard limit |
Source is standalone (cluster_enabled 0) |
blocking for the AWS tool, info for ours | AWS accepts cluster-mode sources only |
| Source engine/version outside Redis OSS 4.0â7.2 or Valkey 7.2â8.1 | blocking for the AWS tool | Supported source range |
PSYNC / REPLCONF renamed or absent (COMMAND INFO) |
blocking | Replication support |
| Slot coverage gaps or overlaps, or a slot migration in progress | blocking | Slot coverage / no resharding |
Scripts in the script cache (SCRIPT EXISTS on sampled SHAs, or INFO number_of_cached_scripts) |
warning | Scripts are not replicated; reload via the endpoint or get NOSCRIPT after cutover |
Pub/sub subscribers present (PUBSUB NUMSUB / INFO pubsub_channels) |
warning | Subscribers are disconnected at cutover |
Commands in the COMMANDLOG/SLOWLOG distribution that Serverless restricts (KEYS, MEMORY, OBJECT, FUNCTION, WAIT, CLIENT LIST, etc.) |
warning | Rejected at the migration endpoint from the moment the app is redirected |
| Pipelining-heavy clients (from client analytics, if available) | info | Pipelines are serialised for the duration of an AWS migration |
Restricted-command list: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/SupportedCommands.html#RestrictedCommandsRedis
Relationship to #546
#546 adds a capacity check comparing source size to target headroom. The 32 GB-per-node and 5,000 GiB-per-cache rules here are the Serverless-specific version of that; if #546 lands first, this should reuse its memory figures rather than re-derive them.
Why
It is a free-tier feature that is useful to people choosing AWS's tool, which is a larger audience than people choosing ours, and it gives the sales story a concrete hook: run the free check before paying for migration nodes. Compare page: https://www.betterdb.com/betterdb-vs-elasticache-serverless-migration
Activity