AWS Stop Function에서 5분 후 DynamoDB 데이터 삭제

개시하다


API Gateway+Lambda+DynamoDB를 이용하여 웹 API를 개발합니다.
DynamoDB에 Lambda 함수를 사용하여 데이터를 쓰고 5분 후에 삭제해야 합니다.
그래서 다음과 같은 방법을 생각해 봤습니다.
・DyanamoDB의 TTL 기능을 사용한 후 5분 후 데이터 삭제
• 데이터가 기록된 람보다에서 5분 후 삭제된 람보다로 호출

DynamoDB의 TTL 기능


먼저 다이나모DB의 TTL 기능을 조사했는데 TTLでは有効期限から48時間以内に期限切れのアイテムを削除します 기록이 있어 5분 뒤에 삭제해야 하는 설정은 불가능하다.
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/howitworks-ttl.html

AWS Step Function 사용


이어서 토론データを書き込むLambdaからデータを削除するLambdaを呼び出す.
조사 결과 AWS Stop Function 을 사용하면 가능하다.실현해 보아라.

데이터를 쓰는 Lambda 함수 만들기


점심시간은 파이썬 3.8. DynamoDB와 StpFunction에 대한 접근권을 부여한다.
다음 Lambda 함수를 사용하여 DynamoDB에 데이터를 쓰고 State Machine을 호출합니다.
State Machine에 userId를 매개 변수로 전달합니다.
lambda_function.py
import  boto3

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

def lambda_handler(event, context):
    # データを書き込むテーブル
    table = dynamoDB.Table('test')
    # 呼び出すStateMachine
    stateMachineArn = 'StateMachineのARN'
    # DynamoDBにデータを書き込む
    table.put_item(Item={'data': data})
    # StateMachineを呼び出す
    input = {"parameters":{"userId":userId}}
    client.start_execution(
        stateMachineArn = stateMachineArn,
        input = json.dumps(input)
        )
    return {'statusCode': 200, 'body': "writeData"}

State Machine 만들기


다음 정의에 따라 State Machine을 만듭니다.
State Machine에서 Lambda에 액세스할 수 있는 권한을 주십시오.
{
  "StartAt": "wait_5_miutes",
  "States": {
    "wait_5_miutes": {
      "Type": "Wait",
      "Seconds": 300,
      "Next": "deleteData"
    },
    "deleteData": {
      "Type": "Task",
      "Resource": "データを削除するLambda関数のARN",
      "Parameters": {
          "userId.$": "$.parameters.userId"
      },
      "End": true
    }
  }
}

데이터 삭제를 위한 Lambda 함수 만들기


다음 Lambda 함수를 실행하여 State Machine에서 데이터를 제거합니다.
lambda_function.py
import boto3

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

# StateMachineで呼び出される
def lambda_handler(event, context):
    # StateMachineからパラメータを受け取る
    userId = event['userId']
    # 削除対象のデータを探す
    searchResult = table.get_item(Key={'userId': userId})
    if "Item" in searchResult:
        table.delete_item(Key={'userId': userId})
    return {'statusCode': 200, 'body': "deleteData"}

끝말


AWS Stop Function을 사용하여 구현DynamoDBへデータを書き込み、そのデータを5分後に削除する되었습니다.
더 복잡한 처리를 할 수 있기 때문에 해보고 싶어요.

참고 자료


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

좋은 웹페이지 즐겨찾기