Guest User

Untitled

a guest
Dec 12th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. import boto3
  2. import datetime
  3.  
  4. s3_client = boto3.client('s3')
  5. # ファイルを残す日数
  6. retention_period = 2
  7. # S3バケット名
  8. bucket_name = 'bucket_name'
  9. # プレフィックスリスト
  10. prefix_list = ['aaa/', 'bbb/', 'ccc/']
  11.  
  12. ###################################################################
  13. # Handler
  14. ###################################################################
  15. def lambda_handler(event, context):
  16.  
  17. deleteFiles(bucket_name, False)
  18.  
  19. ###################################################################
  20. # Delete Files
  21. ###################################################################
  22. def deleteFiles(bucket_name, dryrun=False):
  23.  
  24. next_token = ''
  25.  
  26. for prefix_name in prefix_list:
  27. while True:
  28. if next_token == '':
  29. response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=prefix_name)
  30. else:
  31. response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=prefix_name, ContinuationToken=next_token)
  32.  
  33. if 'Contents' in response:
  34. contents = response['Contents']
  35.  
  36. for content in contents:
  37. obj = s3_client.get_object(Bucket=bucket_name, Key=content['Key'])
  38. if prefix_name != content['Key'] : # プレフィックス(フォルダ)自体は削除対象から除外
  39. gap = datetime.datetime.now(datetime.timezone.utc) - obj['LastModified']
  40. if gap.days >= retention_period: #指定した日数以上のデータを削除対象とする
  41. if not dryrun:
  42. print("Deleting: s3://" + bucket_name + "/" + content['Key'])
  43. s3_client.delete_object(Bucket=bucket_name, Key=content['Key'])
  44. else:
  45. print("DryRun: s3://" + bucket_name + "/" + content['Key'])
  46.  
  47. if 'NextContinuationToken' in response:
  48. next_token = response['NextContinuationToken']
  49. else:
  50. break
Add Comment
Please, Sign In to add comment