Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import boto3
- import datetime
- s3_client = boto3.client('s3')
- # ファイルを残す日数
- retention_period = 2
- # S3バケット名
- bucket_name = 'bucket_name'
- # プレフィックスリスト
- prefix_list = ['aaa/', 'bbb/', 'ccc/']
- ###################################################################
- # Handler
- ###################################################################
- def lambda_handler(event, context):
- deleteFiles(bucket_name, False)
- ###################################################################
- # Delete Files
- ###################################################################
- def deleteFiles(bucket_name, dryrun=False):
- next_token = ''
- for prefix_name in prefix_list:
- while True:
- if next_token == '':
- response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=prefix_name)
- else:
- response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=prefix_name, ContinuationToken=next_token)
- if 'Contents' in response:
- contents = response['Contents']
- for content in contents:
- obj = s3_client.get_object(Bucket=bucket_name, Key=content['Key'])
- if prefix_name != content['Key'] : # プレフィックス(フォルダ)自体は削除対象から除外
- gap = datetime.datetime.now(datetime.timezone.utc) - obj['LastModified']
- if gap.days >= retention_period: #指定した日数以上のデータを削除対象とする
- if not dryrun:
- print("Deleting: s3://" + bucket_name + "/" + content['Key'])
- s3_client.delete_object(Bucket=bucket_name, Key=content['Key'])
- else:
- print("DryRun: s3://" + bucket_name + "/" + content['Key'])
- if 'NextContinuationToken' in response:
- next_token = response['NextContinuationToken']
- else:
- break
Add Comment
Please, Sign In to add comment