我需要配置AWS S3生命周期管理策略,该策略将60天后将所有包含对象标签的备份带有键“ Virginia”的值移动到AWS Glacier的“ True”。我有以下PowerShell脚本,需要帮助的部分是如何使用对象标记及其值进行过滤。
$LifecycleTransition = New-object Amazon.S3.Model.LifecycleTransition
$LifecycleTransition.Days = 60
$LifecycleTransition.StorageClass = ‘Glacier’
$LifecycleRule = New-Object Amazon.S3.Model.LifecycleRule
$LifecycleRule.Id = “Glacier60Days”
$LifecycleRule.Transition = $LifecycleTransition
$LifecycleRule.Prefix = $null
$LifecycleRule.Filter =????
$LifecycleRule.Status = “Enabled”
Write-S3LifecycleConfiguration -BucketName mybucketname -
Configuration_Rules $LifecycleRule
答案 0 :(得分:0)
我发现用PowerShell很难做到这一点,但仍在努力-通过.NET类定义Amazon.S3.Model.LifecycleFilterPredicate似乎很棘手。同时,如果可以使用awscli,可以使用以下方法将json文件与config作为输入:
创建以下配置并将其保存到json文件中:
{ “规则”:[ { “到期”:{ “天”:50 }, “ ID”:“删除60天”, “过滤器”:{ “和”:{ “前缀”:“ py”, “标签”:[ { “键”:“不使用”, “值”:“是” }, { “ Key”:“ raj”, “值”:“假” } ] } }, “状态”:“启用” }, { “到期”:{ “天”:26 }, “ ID”:“在20天内不做任何事情”, “过滤器”:{ “和”:{ “ Prefix”:“ java”, “标签”:[ { “ Key”:“ jadoo”, “值”:“ nagri” } ] } }, “状态”:“启用”, “转换”:[ { “天数”:20, “ StorageClass”:“ GLACIER” } ] } ] }
这里有2条规则。其中一个只是删除,而另一个则发送到冰川-规则都使用标签以及示例所需的前缀
现在,在下面的CLI中使用输入的json文件:
aws s3api put-bucket-lifecycle-configuration --bucket test-bla --lifecycle-configuration file://config.json
这应将给定的配置分配给存储区“ test-bla” 我希望这会有所帮助。
引用put-bucket-lifecycleconfiguration
-[编辑]- 好的-这是PowerShell:
#Create the rule filter object
$NewRule=[Amazon.S3.Model.LifecycleRule]::new()
$NewRule.Id = "Test-From-Write-cmdlet-1"
#Create rule expiration
$NewRuleExpiration = [Amazon.S3.Model.LifecycleRuleExpiration]::new()
$NewRuleExpiration.Days = 50
$NewRule.Expiration = $NewRuleExpiration
$NewRule.Status = [Amazon.S3.LifecycleRuleStatus]::Enabled
#create filter with prefix 'and' tags
$AndOperand=[Amazon.S3.Model.LifecycleAndOperator]::new()
$operands = [System.Collections.Generic.List[Amazon.S3.Model.LifecycleFilterPredicate]]::new()
#create filters to add to AndOperand
$PrefixFilter = [Amazon.S3.Model.LifecyclePrefixPredicate]@{"Prefix"= "py"}
$TagFilter = [Amazon.S3.Model.LifecycleTagPredicate]@{"Tag" = @{"Key" = "non-use";"Value"="yes"}}
#You can add more filters into operands
$operands = @($PrefixFilter, $TagFilter)
#create new filter
$NewLifecycleFilter = [Amazon.S3.Model.LifecycleFilter]::new()
$NewRule.Filter = $NewLifecycleFilter
$NewLifecycleFilter.LifecycleFilterPredicate = $AndOperand
$NewRule.Filter.LifecycleFilterPredicate.Operands = $operands
Write-S3LifecycleConfiguration -BucketName test-bla -Configuration_Rule $NewRule