如何使用策略基于过滤条件删除S3文件夹?

时间:2018-12-09 07:19:49

标签: amazon-s3

如何使用存储桶策略根据指定条件删除S3存储桶中的对象?

  
      
  1. 存储桶中的对象总数每次都应大于5。
  2.   
  3. 对象应具有公共前缀。
  4.   
  5. 对象年龄应该超过X(1,2,3,4 ... n)天。
  6.   

桶结构-

myprefixtest1234bucket //bucket 
        |- prefixtestobject1 //object
        |- prefixtestobject2
        |- prefixtestobject3
        |- prefixtestobject4
        |- prefixtestobject5
        |- prefixtestobject6
        |- prefixtestobject7
        |- testobject8
        |- testobject9
  

我正在尝试删除具有前缀的存储桶中的对象   “ prefixtext”且早于X天,并且此存储桶应保留Y   即使对象的天数超过X天,它也始终保持不变。意味着保持Y个对象的优先级应超过年龄(大于X天)。

我尝试了以下策略,但是没有用,并且不确定如何添加年龄和对象计数逻辑。

{
"Id": "Policy123456",
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"TestBucketObjectDeletion",
      "Effect":"Allow",
      "Principal": {"AWS": ["arn:aws:iam::123456789:root"]},
      "Action":["s3:DeleteObject"],
      "Resource":["arn:aws:s3:::myprefixtest1234/*"],
      "Condition":{"StringEquals":{"myprefixtest1234"}}
    }
  ]
}

1 个答案:

答案 0 :(得分:2)

  

当前,无法指定保留数字(1,2,3 .... n)   存储桶中的对象,并根据通用前缀删除其余对象   但是我们可以根据年龄使用以下方式设置存储桶对象的到期时间:   存储桶生命周期。

aws s3api put-bucket-lifecycle-configuration  \
--bucket bucketname  \
--lifecycle-configuration file://lifecycle.json

并使用s3api这样放置它-

 public class HeightConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int.TryParse(parameter.ToString(), out var items);
        double.TryParse(value.ToString(), out var actualheight);
        return actualheight / items;
    }
         //......    
  }

 <Window.Resources>
    <local:HeightConverter x:Key="HeightConverter"/>
</Window.Resources>
<Grid x:Name="mainGrid" Background="Gray">
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>

    </Grid.RowDefinitions>
    <local:sampleControl Background="Red" Grid.Row="0" Height="{Binding ElementName=mainGrid, Path=ActualHeight, Converter={StaticResource HeightConverter}, ConverterParameter=3}"/>
    <local:sampleControl Background="Yellow" Grid.Row="1" Height="{Binding ElementName=mainGrid, Path=ActualHeight, Converter={StaticResource HeightConverter}, ConverterParameter=3}"/>

    <local:sampleControl Background="Blue" Grid.Row="2" Height="{Binding ElementName=mainGrid, Path=ActualHeight, Converter={StaticResource HeightConverter}, ConverterParameter=3}"/>

</Grid>

更多可用信息- Herehere