Introdução
Registros temporários de sessão devem deixar de ser fornecidos ao expirar, mesmo que a limpeza do armazenamento ainda não tenha ocorrido. Você ativará TTL, corrigirá um atributo de expiração com tipo incorreto e configurará uma aplicação fornecida para excluir dados expirados usando leituras efetivas do serviço.
Conclua primeiro Crie uma tabela DynamoDB para pedidos e Consulte pedidos com uma chave de partição e de ordenação. O ambiente novo fornece uma tabela independente de sessões, três registros sintéticos e uma estrutura de leitura, pronta para você configurar TTL e o filtro de leitura. Use /home/labex/project, a AWS CLI oficial e AWS View. Este laboratório avalia a configuração de TTL e leituras que consideram a expiração; ele não promete um prazo de exclusão em segundo plano na AWS.
Relação com as certificações
| Certificação | Tarefa do exame | Prática |
|---|---|---|
| Developer – Associate (DVA-C02) | Tarefa 1.3 | Configuração de TTL DynamoDB e leituras que consideram a expiração. |
| Data Engineer – Associate (DEA-C01) | Tarefa 2.3 | Prática dos fundamentos: Configuração de TTL DynamoDB e leituras que consideram a expiração. |
Visão geral do laboratório

Ative a expiração na tabela de sessões preparada
Nesta etapa, você configurará o atributo de expiração de uma tabela. Time to Live (TTL) permite que DynamoDB remova itens expirados posteriormente. É uma manutenção assíncrona, não um temporizador que exclui cada item no segundo exato de expiração. As aplicações ainda devem recusar dados expirados enquanto a exclusão pelo serviço está pendente.
Para este leitor de sessões, poder servir um registro e removê-lo do armazenamento são resultados distintos. Você verificará o estado de TTL, corrigirá o tipo da expiração e comparará a aplicação com uma leitura direta. ENABLED comprova a configuração; omitir uma sessão expirada comprova a política de leitura, não a exclusão do item pelo serviço.
O ambiente novo contém uma tabela de sessões com registros sintéticos ativo, expirado e permanente. Inspecione seus tipos e o estado desativado de TTL antes de ativar qualquer coisa.
cd /home/labex/project
aws dynamodb scan --table-name labex-d05-sessions --consistent-read
aws dynamodb describe-time-to-live --table-name labex-d05-sessions
Ative TTL em expires_at. Cada item fornece seu próprio horário de expiração; a configuração da tabela seleciona qual atributo o serviço TTL examina. A ausência do atributo significa que esse item não tem expiração TTL.
aws dynamodb update-time-to-live \
--table-name labex-d05-sessions \
--time-to-live-specification Enabled=true,AttributeName=expires_at
aws dynamodb describe-time-to-live --table-name labex-d05-sessions
Continue quando a descrição informar ENABLED e expires_at. Na AWS, a ativação pode levar tempo; repita o comando describe enquanto estiver ENABLING em vez de alterar a configuração repetidamente. Observe AWS View na parte superior e expanda a entrada TTL dentro do cartão de sessões.
Corrija o tipo do atributo do registro expirado
Nesta etapa, você armazenará um valor válido de expiração. TTL do DynamoDB exige um Number contendo segundos Unix epoch: segundos desde 1970-01-01 UTC. Milissegundos representariam um horário muito distante no futuro. Uma string que parece um timestamp ainda é uma String, e o processo TTL a ignora.
Inspecione o registro expirado fornecido pela chave exata. Seu expires_at está intencionalmente codificado com S; ativar TTL não corrigiu seu tipo.
aws dynamodb get-item \
--table-name labex-d05-sessions \
--key '{"session_id":{"S":"expired"}}' \
--consistent-read
Calcule uma expiração de uma hora atrás com o comando Linux date. +%s exibe segundos Unix, e $(...) armazena essa saída em EXPIRED. O valor varia a cada vez; ele deve ser anterior ao horário atual.
EXPIRED=$(date -u -d '1 hour ago' +%s)
echo "$EXPIRED"
Coloque o valor tipado em um pequeno arquivo JSON. Este heredoc usa um delimitador JSON sem aspas para que o shell substitua $EXPIRED pelo seu timestamp; delimitadores anteriores entre aspas mantinham valores literais. Manter o JSON em um arquivo evita escapar suas aspas.
cat > expiry-values.json <<JSON
{":expires":{"N":"$EXPIRED"}}
JSON
Use UpdateItem para substituir apenas o atributo de expiração. file:// carrega o arquivo de valores; a condição de existência evita recriar um registro caso a exclusão assíncrona já o tenha removido.
aws dynamodb update-item \
--table-name labex-d05-sessions \
--key '{"session_id":{"S":"expired"}}' \
--update-expression 'SET expires_at = :expires' \
--condition-expression 'attribute_exists(session_id)' \
--expression-attribute-values file://expiry-values.json \
--return-values ALL_NEW
O item expirado retornado tem expires_at: {"N": "..."} no passado e mantém seu purpose. O item ativo permanece no futuro; o item permanente ainda não tem expiração. Na AWS, se o registro foi removido antes de uma leitura ou atualização posterior, trate isso como exclusão apenas após uma resposta bem-sucedida do serviço, não uma falha de conexão.
Exclua dados expirados do caminho de leitura da aplicação
Nesta etapa, você protegerá as leituras enquanto a limpeza por TTL está pendente. Uma aplicação session-reader fornecida lê configurações comuns de session-reader.json e realiza solicitações Scan efetivas. Sua configuração padrão intencionalmente retorna dados expirados também. O código-fonte da aplicação está disponível para inspeção; não é necessário escrever Python.
./session-reader
Neste ambiente, o leitor sem filtro ainda retorna os três registros, incluindo expired. Isso não comprova que TTL está configurado incorretamente. A exclusão em segundo plano na AWS pode ocorrer depois, e nenhum cronograma preciso faz parte da aceitação deste laboratório.
Ative o filtro de expiração da aplicação. Um heredoc entre aspas grava JSON literalmente, substituindo o arquivo de configurações.
cat > session-reader.json <<'JSON'
{
"table": "labex-d05-sessions",
"filter_expired": true
}
JSON
./session-reader
A aplicação usa attribute_not_exists(expires_at) OR expires_at > :now com os segundos Number atuais e segue as chaves de continuação de Scan. Agora ela retorna apenas active e permanent, com Count 2 e FilterExpired true. O registro permanente é intencional porque não tem política de expiração. O filtro impede fornecer dados expirados, mas não desfaz o trabalho de leitura de um scan.

Compare a leitura bruta por chave com o resultado da aplicação.
aws dynamodb get-item \
--table-name labex-d05-sessions \
--key '{"session_id":{"S":"expired"}}' \
--consistent-read
A leitura bruta ainda pode conter expired enquanto a aplicação o exclui. Se a AWS já o excluiu, um GetItem vazio bem-sucedido também é compatível com TTL. AWS View mostra a configuração TTL e o resultado efetivo de dois itens do leitor sem fingir que o filtro excluiu fisicamente o registro armazenado.

Remova a tabela de sessões do exercício
Nesta etapa, você limpará explicitamente a tabela após verificar a configuração de expiração e o comportamento da aplicação. Não espere TTL remover a tabela inteira: TTL exclui itens, não a própria tabela. Excluir esta tabela descartável também remove sua configuração TTL.
aws dynamodb delete-table --table-name labex-d05-sessions
aws dynamodb wait table-not-exists --table-name labex-d05-sessions
aws dynamodb list-tables
aws dynamodb get-item \
--table-name labex-d05-reference \
--key '{"id":{"S":"platform"}}' \
--consistent-read
Resta apenas a tabela de referência e sua nota é keep unchanged. Leituras bem-sucedidas do inventário e da referência comprovam que a conexão ainda funciona após a exclusão. AWS View remove a tabela de sessões e o resultado do leitor. A conexão descartável termina com esta VM.
Resumo
Você ativou TTL em expires_at, substituiu um timestamp String por segundos epoch numéricos e excluiu sessões expiradas em um caminho efetivo de leitura da aplicação. Você distinguiu expiração lógica de exclusão física assíncrona e manteve registros permanentes deliberadamente. Por fim, excluiu a tabela do exercício e preservou a referência não relacionada.
Para aprofundar o tema, consulte a documentação da AWS: Expiração TTL e exclusão assíncrona de itens.



