如何在S3上删除或清除旧文件?

时间:2012-01-24 09:34:52

标签: amazon-s3 timestamp delete-file s3cmd purge

是否有现有的解决方案可以删除超过x天的所有文件?

5 个答案:

答案 0 :(得分:77)

亚马逊最近推出了object expiration

  

Amazon S3宣布对象过期

     

亚马逊S3宣布了新的   功能,对象到期,允许您安排删除   在预定义的时间段后您的对象。使用对象过期   安排定期删除对象消除了你的需要   识别要删除的对象并向Amazon提交删除请求   S3。

     

您可以为一组对象定义对象到期规则   你的水桶。每个对象过期规则允许您指定一个   前缀和有效期(以天为单位)。前缀字段(例如   logs/)标识符合到期规则的对象,以及   到期时间指定从创建日期开始的天数   (即年龄)之后应移除的物体。一旦对象   超过他们的到期日期,他们将排队等待删除。您   我们不会对其上或之后的物品进行存储计费   到期日。

答案 1 :(得分:4)

以下是有关如何操作的一些信息......

http://docs.amazonwebservices.com/AmazonS3/latest/dev/ObjectExpiration.html

希望这有帮助。

答案 2 :(得分:1)

以下是如何使用CloudFormation模板实现它:

  JenkinsArtifactsBucket:
    Type: "AWS::S3::Bucket"
    Properties:
      BucketName: !Sub "jenkins-artifacts"
      LifecycleConfiguration:
        Rules:
          - Id: "remove-old-artifacts"
            ExpirationInDays: 3
            NoncurrentVersionExpirationInDays: 3
            Status: Enabled

这将创建生命周期规则,如@Ravi Bhatt所述

进一步了解: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html

对象生命周期管理如何工作: https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html

答案 3 :(得分:0)

您可以使用AWS S3生命周期规则来使文件过期并删除它们。您所需要做的就是选择存储桶,单击“添加生命周期规则”按钮并对其进行配置,AWS会为您照顾它们。

您可以参考Joe的以下博客文章,以获取逐步说明。实际上这很简单:

https://www.joe0.com/2017/05/24/amazon-s3-how-to-delete-files-older-than-x-days/

希望有帮助!

答案 4 :(得分:0)

您可以使用以下Powershell脚本删除x days之后过期的对象。

[CmdletBinding()]
Param(  
  [Parameter(Mandatory=$True)]
  [string]$BUCKET_NAME,             #Name of the Bucket

  [Parameter(Mandatory=$True)]
  [string]$OBJ_PATH,                #Key prefix of s3 object (directory path)

  [Parameter(Mandatory=$True)]
  [string]$EXPIRY_DAYS             #Number of days to expire
)

$CURRENT_DATE = Get-Date
$OBJECTS = Get-S3Object $BUCKET_NAME -KeyPrefix $OBJ_PATH
Foreach($OBJ in $OBJECTS){
    IF($OBJ.key -ne $OBJ_PATH){
        IF(($CURRENT_DATE - $OBJ.LastModified).Days -le $EXPIRY_DAYS){
            Write-Host "Deleting Object= " $OBJ.key
            Remove-S3Object -BucketName $BUCKET_NAME -Key $OBJ.Key -Force
        }
    }
}