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
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
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.
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é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
}
}
}
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 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é.
https://qiita.com/ketancho/items/147a141c9f8a6de86c97 https://aws.amazon.com/jp/getting-started/hands-on/create-a-serverless-workflow-step-functions-lambda/
Recommended Posts