O DynamoDB suporta TTL?
Sim. O DynamoDB suporta Time to Live (TTL). Você designa um atributo Number que contém um timestamp de expiração em epoch Unix, em segundos; o DynamoDB então remove os itens expirados em segundo plano — normalmente dentro de alguns dias após a expiração — sem custo extra e sem consumir capacidade de escrita. Itens expirados mas ainda não excluídos podem continuar aparecendo em leituras até serem removidos.
Como habilitar
Ative o TTL para a tabela e nomeie o atributo que guarda a expiração. Esse atributo precisa ser um Number armazenando um timestamp em epoch Unix em segundos (não em milissegundos). Itens cujo valor está no passado tornam-se elegíveis para exclusão.
O que esperar
- Gratuito — a exclusão automática não consome unidades de capacidade de escrita. Fazer a mesma limpeza você mesmo custa uma unidade de escrita por item: dez milhões de itens expirados de 1 KB são dez milhões de unidades de escrita, US$6,25 no on-demand em
us-east-1, mais cerca de US$1,64 para cada scan completo sobre uma tabela de 100 GB para encontrá-los. (Uma exceção: em uma tabela global, a exclusão replicada para cada outra Região consome, sim, capacidade de escrita replicada lá.) - Não é instantâneo — o DynamoDB normalmente remove os itens expirados dentro de alguns dias após a expiração.
- Ainda legíveis — até serem fisicamente excluídos, itens expirados podem aparecer em leituras, consultas e scans, então filtre-os se a exatidão importar.
O jeito como ele silenciosamente nunca dispara
O DynamoDB não valida o atributo para o qual você apontou o TTL. Estas duas escritas retornaram HTTP 200 em uma tabela com TTL habilitado em expiresAt, e nenhum dos dois itens vai expirar algum dia:
{"pk": {"S": "sess#1"}, "expiresAt": {"S": "1790812800"}}
{"pk": {"S": "sess#2"}, "expiresAt": {"N": "1790812800000"}}A primeira armazena o timestamp como String. A AWS é explícita ao dizer que "items with a TTL attribute that is not a Number type are ignored by the TTL process", e nada te avisa no momento da escrita, no momento da habilitação nem depois.
A segunda é a que de fato acontece, porque o tipo está certo e o valor veio de Date.now(). 1790812800000 é 1º de outubro de 2026 em milissegundos. Lido como segundos, que é o único jeito como o TTL o lê, esse timestamp cai no ano 58718. O item está bem formado, é consultável, é cobrado como armazenamento e está agendado para expirar daqui a cinquenta e seis mil anos.
Nada na API expõe nenhum desses dois erros, então a checagem precisa acontecer antes de você escrever. Nosso conversor de TTL trata qualquer valor acima de 1e12 como milissegundos por essa razão, e mostra a data para a qual o valor resolve.
Usos comuns
Registros de sessão, tokens de verificação e resultados cacheados que devem se limpar sozinhos — os casos de uso clássicos de TTL. Combine com o DynamoDB Streams para reagir às exclusões.
Aprofunde-se
Leia o guia de TTL do DynamoDB e DynamoDB Streams. Baixe o DynoTable para visualizar e definir atributos de TTL.
Referências
- Using time to live (TTL) in DynamoDB — Amazon DynamoDB Developer Guide
- Working with expired items and time to live (TTL) — Amazon DynamoDB Developer Guide
- How DynamoDB global tables work — Amazon DynamoDB Developer Guide
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima; TTL.html reconferido em 2026-07-28.
As duas escritas acima foram executadas em 2026-07-28 contra o DynamoDB Local 3.3.0 via @aws-sdk/client-dynamodb 3.1095.0 e foram aceitas com HTTP 200. Os custos de limpeza foram calculados a partir das taxas on-demand de us-east-1 na nossa tabela de preços da AWS sincronizada.