Ich entwickle eine Web-API mit API Gateway + Lambda + DynamoDB. Ich musste Daten mit der Lambda-Funktion in DynamoDB schreiben und diese Daten nach 5 Minuten löschen. Daher habe ich die folgende Methode in Betracht gezogen. -Löschen Sie Daten nach 5 Minuten mit der TTL-Funktion von DynamoDB · Rufen Sie Lambda an, um Daten nach 5 Minuten von Lambda zu löschen, um Daten zu schreiben
Zuerst habe ich die TTL-Funktion von DynamoDB überprüft, aber es gab eine Beschreibung, dass "TTL Elemente löscht, die innerhalb von 48 Stunden nach dem Ablaufdatum abgelaufen sind", und es war nicht möglich, die Löschung immer nach 5 Minuten festzulegen. https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/howitworks-ttl.html
Als nächstes sollten Sie "Lambda aufrufen, um Daten aus Lambda zu löschen, um Daten zu schreiben". Als Ergebnis der Untersuchung scheint es, dass es mit AWS-Schrittfunktionen realisiert werden kann. Ich werde versuchen, es umzusetzen.
Die Laufzeit gewährt Zugriff auf Python 3.8-, DynamoDB- und Schrittfunktionen. Schreiben Sie Daten mit der folgenden Lambda-Funktion in DynamoDB und rufen Sie StateMachine auf. Übergeben Sie userId als Parameter an StateMachine.
lambda_function.py
import boto3
client = boto3.client('stepfunctions')
dynamoDB = boto3.resource('dynamodb')
def lambda_handler(event, context):
#Tabelle zum Schreiben von Daten
table = dynamoDB.Table('test')
#Rufen Sie State Machine an
stateMachineArn = 'Zustandsmaschine ARN'
#Schreiben Sie Daten in DynamoDB
table.put_item(Item={'data': data})
#Rufen Sie StateMachine auf
input = {"parameters":{"userId":userId}}
client.start_execution(
stateMachineArn = stateMachineArn,
input = json.dumps(input)
)
return {'statusCode': 200, 'body': "writeData"}
Erstellen Sie eine Zustandsmaschine mit der folgenden Definition. Geben Sie StateMachine Zugriff auf Lambda.
{
"StartAt": "wait_5_miutes",
"States": {
"wait_5_miutes": {
"Type": "Wait",
"Seconds": 300,
"Next": "deleteData"
},
"deleteData": {
"Type": "Task",
"Resource": "ARN der Lambda-Funktion zum Löschen von Daten",
"Parameters": {
"userId.$": "$.parameters.userId"
},
"End": true
}
}
}
Löschen Sie die Daten aus StateMachine, indem Sie die folgende Lambda-Funktion ausführen.
lambda_function.py
import boto3
dynamoDB = boto3.resource('dynamodb')
table = dynamoDB.Table('test')
#Wird von StateMachine aufgerufen
def lambda_handler(event, context):
#Erhalten Sie Parameter von StateMachine
userId = event['userId']
#Suchen Sie die zu löschenden Daten
searchResult = table.get_item(Key={'userId': userId})
if "Item" in searchResult:
table.delete_item(Key={'userId': userId})
return {'statusCode': 200, 'body': "deleteData"}
Mithilfe der AWS-Schrittfunktionen konnten wir "Daten in DynamoDB schreiben und diese Daten nach 5 Minuten löschen" realisieren. Ich würde es gerne versuchen, da anscheinend eine kompliziertere Verarbeitung möglich ist.
https://qiita.com/ketancho/items/147a141c9f8a6de86c97 https://aws.amazon.com/jp/getting-started/hands-on/create-a-serverless-workflow-step-functions-lambda/
Recommended Posts