DEV Community

camilo cabrales
camilo cabrales

Posted on

3 3

DynamoDB TTL

Vamos a utilizar DynamoDB para el manejo de la sesión de una aplicación Web en Python.

Lo primero que debemos hacer es crear la tabla en la cual vamos a tener los datos de la sesión.

dynamodb.create_table(
        TableName='ManejoSesion',
        KeySchema=[
            {
                'AttributeName': 'Sesion_Id',
                'KeyType': 'HASH'  # Partition key
            }
        ],
        #Se deben crear las llaves nuevamente con su tipo de dato
        AttributeDefinitions=[
            {
                'AttributeName': 'Sesion_Id',
                'AttributeType': 'S'  # Se utiliza S para tipos de datos String y N para numeros
            }

        ],
        ProvisionedThroughput={
            'ReadCapacityUnits': 5,
            'WriteCapacityUnits': 5
        }
    )

Enter fullscreen mode Exit fullscreen mode

El siguiente paso es definir cuál atributo (columna) se va utilizar para que los registros sean borrados después del tiempo definido.

Para eso vamos a la consola de DynamoDB de la tabla creada y vamos al menu Aditional Settings.

Aditional Settings

Después buscamos la sección TTL y presionamos el botón Enable.

TTL

En la siguiente pantalla especificamos el nombre del atributo por el cual queremos que se borre el registro o la fila (Expire_Session).

Enable TTL

Para definir el tiempo de borrado vamos agregar un registro a la tabla en donde se va a definir la fecha de borrado (fecha actual + 5 minutos) para el registro en el campo Expire_Session que acabamos de configurar.

from datetime import datetime
from datetime import timedelta
import boto3
import os
import uuid
from decimal import Decimal

dynamo = boto3.resource("dynamodb")
tabla = dynamo.Table("ManejoSesion")

def obtener_vencimiento_sesion():
    hora_fin_sesion = datetime.now() + timedelta(minutes = 5)
    return Decimal(round(hora_fin_sesion.timestamp(),0))

sesion_id = uuid.uuid4().hex
sesion ={
        "Sesion_Id":str(sesion_id),
        "Expire_Session":obtener_vencimiento_sesion()
}
tabla.put_item(Item=sesion)

Enter fullscreen mode Exit fullscreen mode

De esta forma hemos definido que el registro se va a borrar 5 minutos después de la fecha actual. Es importante tener en cuenta que pasados los 5 minutos aun vamos a ver el registro en nuestra tabla. De acuerdo a la documentación, DynamoDb ejecuta un proceso en segundo plano para eliminar estos registros y este proceso puede llegar a tardar 48 horas.

En caso que necesitemos obtener los registros que aun no se les ha vencido la fecha de borrado podemos hacer una consulta de este tipo:

hora = Decimal(round(datetime.now().timestamp(),0))
tabla.query(KeyConditionExpression=Key("Sesion_Id").eq("b05ce2de320a4cddbcc1fa64400d14c9"),
FilterExpression= 'Expire_Session >= :Expire_Session' ,
    ExpressionAttributeValues= { 
        ':Expire_Session': hora
    })
Enter fullscreen mode Exit fullscreen mode

Referencias

DynamoDb TTL

Me pueden encontrar en

Camilo Cabrales

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay