

# Habilitar a vida útil (TTL) no DynamoDB
<a name="time-to-live-ttl-how-to"></a>

**nota**  
Para auxiliar na depuração e verificação da operação adequada do recurso TTL, os valores fornecidos para o item TTL são registrados em log em texto simples nos logs de diagnóstico do DynamoDB.

É possível habilitar a TTL no console do Amazon DynamoDB, na AWS Command Line Interface (AWS CLI) ou usando a [Referência da API do Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/) com qualquer um dos supostos SDKs da AWS. Demora cerca de uma hora para que a TTL seja habilitada em todas as partições.

## Habilitar a TTL do DynamoDB usando o console da AWS
<a name="time-to-live-ttl-how-to-enable-console"></a>

1. Faça login no Console de gerenciamento da AWS e abra o console do DynamoDB em [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1. Escolha **Tables (Tabelas)** e selecione a tabela que você deseja modificar.

1. Na guia **Configurações adicionais**, na seção **Vida útil (TTL)**, selecione **Ativar** para habilitar a TTL.

1. Ao habilitar o TTL em uma tabela, o DynamoDB exige identificar um nome de atributo específico que o serviço procurará ao determinar se um item está qualificado para expiração. O nome do atributo TTL, mostrado abaixo, diferencia maiúsculas de minúsculas e deve corresponder ao atributo definido em suas operações de leitura e gravação. Uma incompatibilidade fará com que os itens expirados não sejam excluídos. Para renomear o atributo TTL, é necessário desabilitar a TTL e a reabilitar com o novo atributo daqui para frente. A TTL continuará processando as exclusões por cerca de trinta minutos depois de desabilitada. A TTL deve ser reconfigurada em tabelas restauradas.  
![Nome do atributo TTL com distinção entre maiúsculas e minúsculas que o DynamoDB usa para determinar a elegibilidade de um item para validade.](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/EnableTTL-Settings.png)

1. (Opcional) É possível realizar um teste simulando a data e a hora da validade e combinando alguns itens. Isso fornece uma lista de exemplos de itens e confirma que há itens com o nome do atributo TTL fornecido junto com o prazo de validade.

Depois de habilitar a TTL, o atributo TTL é marcado como **TTL** quando você visualiza itens no console do DynamoDB. Você pode visualizar a data e a hora em que um item expira posicionando o mouse sobre o atributo. 

## Habilitar a TTL do DynamoDB usando a API
<a name="time-to-live-ttl-how-to-enable-api"></a>

------
#### [ Python ]

É possível habilitar a TTL com código, usando a operação [UpdateTimeToLive](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/update_time_to_live.html).

```
import boto3


def enable_ttl(table_name, ttl_attribute_name):
    """
    Enables TTL on DynamoDB table for a given attribute name
        on success, returns a status code of 200
        on error, throws an exception

    :param table_name: Name of the DynamoDB table
    :param ttl_attribute_name: The name of the TTL attribute being provided to the table.
    """
    try:
        dynamodb = boto3.client('dynamodb')

        # Enable TTL on an existing DynamoDB table
        response = dynamodb.update_time_to_live(
            TableName=table_name,
            TimeToLiveSpecification={
                'Enabled': True,
                'AttributeName': ttl_attribute_name
            }
        )

        # In the returned response, check for a successful status code.
        if response['ResponseMetadata']['HTTPStatusCode'] == 200:
            print("TTL has been enabled successfully.")
        else:
            print(f"Failed to enable TTL, status code {response['ResponseMetadata']['HTTPStatusCode']}")
    except Exception as ex:
        print("Couldn't enable TTL in table %s. Here's why: %s" % (table_name, ex))
        raise


# your values
enable_ttl('your-table-name', 'expirationDate')
```

É possível confirmar se a TTL está habilitada usando a operação [DescribeTimeToLive](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_time_to_live.html), que descreve o status da TTL em uma tabela. O status `TimeToLive` é `ENABLED` ou `DISABLED`.

```
# create a DynamoDB client
dynamodb = boto3.client('dynamodb')

# set the table name
table_name = 'YourTable'

# describe TTL
response = dynamodb.describe_time_to_live(TableName=table_name)
```

------
#### [ JavaScript ]

É possível habilitar a TTL com código, usando a operação [UpdateTimeToLiveCommand](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-dynamodb/Class/UpdateTimeToLiveCommand/).

```
import { DynamoDBClient, UpdateTimeToLiveCommand } from "@aws-sdk/client-dynamodb";

const enableTTL = async (tableName, ttlAttribute) => {

    const client = new DynamoDBClient({});

    const params = {
        TableName: tableName,
        TimeToLiveSpecification: {
            Enabled: true,
            AttributeName: ttlAttribute
        }
    };

    try {
        const response = await client.send(new UpdateTimeToLiveCommand(params));
        if (response.$metadata.httpStatusCode === 200) {
            console.log(`TTL enabled successfully for table ${tableName}, using attribute name ${ttlAttribute}.`);
        } else {
            console.log(`Failed to enable TTL for table ${tableName}, response object: ${response}`);
        }
        return response;
    } catch (e) {
        console.error(`Error enabling TTL: ${e}`);
        throw e;
    }
};

// call with your own values
enableTTL('ExampleTable', 'exampleTtlAttribute');
```

------

## Habilitar a vida útil usando a AWS CLI
<a name="time-to-live-ttl-how-to-enable-cli-sdk"></a>

1. Habilite o TTL na tabela `TTLExample`.

   ```
   aws dynamodb update-time-to-live --table-name TTLExample --time-to-live-specification "Enabled=true, AttributeName=ttl"
   ```

1. Descreva o TTL na tabela `TTLExample`.

   ```
   aws dynamodb describe-time-to-live --table-name TTLExample
   {
       "TimeToLiveDescription": {
           "AttributeName": "ttl",
           "TimeToLiveStatus": "ENABLED"
       }
   }
   ```

1. Para adicionar um item à tabela `TTLExample` com o conjunto de atributos de vida útil usando o shell BASH e a AWS CLI. 

   ```
   EXP=`date -d '+5 days' +%s`
   aws dynamodb put-item --table-name "TTLExample" --item '{"id": {"N": "1"}, "ttl": {"N": "'$EXP'"}}'
   ```

Este exemplo inicia na data atual e adiciona 5 dias a ela para criar uma data de expiração. Depois, ele converte a data de expiração em formato de hora epoch para finalmente adicionar um item à tabela "`TTLExample`". 

**nota**  
 Uma forma de definir os valores de expiração para a vida útil é calcular o número de segundos para adicionar o tempo de expiração. Por exemplo, 5 dias é igual a 432.000 segundos. No entanto, muitas vezes é preferível começar com uma data e trabalhar a partir desse ponto.

É muito simples obter a hora atual no formato de hora epoch, como nos seguintes exemplos.
+ Terminal Linux: `date +%s`
+ Python: `import time; int(time.time())`
+ Java: `System.currentTimeMillis() / 1000L`
+ JavaScript: : `Math.floor(Date.now() / 1000)`

## Habilitar a TTL do DynamoDB usando o CloudFormation
<a name="time-to-live-ttl-how-to-enable-cf"></a>

```
AWSTemplateFormatVersion: "2010-09-09"
Resources:
  TTLExampleTable:
    Type: AWS::DynamoDB::Table
    Description: "A DynamoDB table with TTL Specification enabled"
    Properties:
      AttributeDefinitions:
        - AttributeName: "Album"
          AttributeType: "S"
        - AttributeName: "Artist"
          AttributeType: "S"
      KeySchema:
        - AttributeName: "Album"
          KeyType: "HASH"
        - AttributeName: "Artist"
          KeyType: "RANGE"
      ProvisionedThroughput:
        ReadCapacityUnits: "5"
        WriteCapacityUnits: "5"
      TimeToLiveSpecification:
        AttributeName: "TTLExampleAttribute"
        Enabled: true
```

Detalhes adicionais sobre o uso do TTL em seus modelos do CloudFormation podem ser encontrados [aqui](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-timetolivespecification.html).