如何使用存储桶策略根据指定条件删除S3存储桶中的对象?
- 存储桶中的对象总数每次都应大于5。
- 对象应具有公共前缀。
- 对象年龄应该超过X(1,2,3,4 ... n)天。
桶结构-
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"}}
}
]
}
答案 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>