[PYTHON] Supprimer les données DynamoDB après 5 minutes avec AWS Step Functions

introduction

Je développe une API Web avec API Gateway + Lambda + DynamoDB. J'ai dû écrire des données dans DynamoDB avec la fonction Lambda et supprimer ces données après 5 minutes. Par conséquent, j'ai envisagé la méthode suivante. -Supprimer les données après 5 minutes en utilisant la fonction TTL de DynamoDB · Appelez Lambda pour supprimer les données après 5 minutes de Lambda pour écrire des données

Fonction DynamoDB TTL

Tout d'abord, j'ai vérifié la fonction TTL de DynamoDB, mais il y avait une description selon laquelle «TTL supprimera les éléments qui ont expiré dans les 48 heures suivant la date d'expiration», et il n'était pas possible de définir pour toujours supprimer après 5 minutes. https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/howitworks-ttl.html

Utiliser AWS Step Functions

Ensuite, envisagez d'appeler Lambda pour supprimer des données de Lambda afin d'écrire des données. À la suite de l'enquête, il semble que cela puisse être réalisé en utilisant AWS Step Functions. J'essaierai de le mettre en œuvre.

Créer une fonction Lambda pour écrire des données

Le runtime donne accès à Python 3.8, DynamoDB et Step Functions. Écrivez des données dans DynamoDB avec la fonction Lambda suivante et appelez StateMachine. Passez userId en tant que paramètre à StateMachine.

lambda_function.py


import  boto3

client = boto3.client('stepfunctions')
dynamoDB = boto3.resource('dynamodb')

def lambda_handler(event, context):
    #Table pour écrire des données
    table = dynamoDB.Table('test')
    #Call State Machine
    stateMachineArn = 'ARN de la machine d'état'
    #Ecrire des données dans DynamoDB
    table.put_item(Item={'data': data})
    #Appeler StateMachine
    input = {"parameters":{"userId":userId}}
    client.start_execution(
        stateMachineArn = stateMachineArn,
        input = json.dumps(input)
        )
    return {'statusCode': 200, 'body': "writeData"}

Créer une machine à états

Créez une machine à états avec la définition suivante. Accordez à StateMachine l'accès à Lambda.

{
  "StartAt": "wait_5_miutes",
  "States": {
    "wait_5_miutes": {
      "Type": "Wait",
      "Seconds": 300,
      "Next": "deleteData"
    },
    "deleteData": {
      "Type": "Task",
      "Resource": "ARN de la fonction Lambda pour supprimer des données",
      "Parameters": {
          "userId.$": "$.parameters.userId"
      },
      "End": true
    }
  }
}

スクリーンショット 2020-09-20 16.04.15.png

Créer une fonction Lambda qui supprime des données

Supprimez les données de StateMachine en exécutant la fonction Lambda suivante.

lambda_function.py


import boto3

dynamoDB = boto3.resource('dynamodb')
table = dynamoDB.Table('test')

#Appelé par StateMachine
def lambda_handler(event, context):
    #Recevoir les paramètres de StateMachine
    userId = event['userId']
    #Trouvez les données à supprimer
    searchResult = table.get_item(Key={'userId': userId})
    if "Item" in searchResult:
        table.delete_item(Key={'userId': userId})
    return {'statusCode': 200, 'body': "deleteData"}

en conclusion

En utilisant AWS Step Functions, nous avons pu réaliser «écrire des données dans DynamoDB et supprimer ces données après 5 minutes». J'aimerais l'essayer car il semble qu'un traitement plus compliqué puisse être effectué.

référence

https://qiita.com/ketancho/items/147a141c9f8a6de86c97 https://aws.amazon.com/jp/getting-started/hands-on/create-a-serverless-workflow-step-functions-lambda/

Recommended Posts

Supprimer les données DynamoDB après 5 minutes avec AWS Step Functions
AWS Step Functions pour apprendre avec un exemple
[AWS] Play with Step Functions (SAM + Lambda) Part.3 (Branch)
[AWS] Play with Step Functions (SAM + Lambda) Part.1 (Basic)
[AWS] Play with Step Functions (SAM + Lambda) Part.2 (Paramètres)
Gérez vos données avec AWS RDS
Déployez des fonctions avec Cloud Pak for Data
Manipulation des données DynamoDB avec Lambda (Node et Python)
Écraser les données dans RDS avec AWS Glue
[AWS SAM] Créer une API avec DynamoDB + Lambda + API Gateway
[AWS] Migrer les données de DynamoDB vers Aurora MySQL
Afficher l'image après l'augmentation des données avec Pytorch