使用PowerShell使用过滤器进行S3生命周期配置

时间:2019-08-01 14:56:42

标签: amazon-web-services powershell amazon-s3

我需要配置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

1 个答案:

答案 0 :(得分:0)

我发现用PowerShell很难做到这一点,但仍在努力-通过.NET类定义Amazon.S3.Model.LifecycleFilterPredicate似乎很棘手。同时,如果可以使用awscli,可以使用以下方法将json文件与config作为输入:

  1. 创建以下配置并将其保存到json文件中:

    {     “规则”:[         {             “到期”:{                 “天”:50             },             “ ID”:“删除60天”,             “过滤器”:{                 “和”:{                     “前缀”:“ py”,                     “标签”:[                         {                             “键”:“不使用”,                             “值”:“是”                         },                         {                             “ Key”:“ raj”,                             “值”:“假”                         }                     ]                 }             },             “状态”:“启用”         },         {             “到期”:{                 “天”:26             },             “ ID”:“在20天内不做任何事情”,             “过滤器”:{                 “和”:{                     “ Prefix”:“ java”,                     “标签”:[                         {                             “ Key”:“ jadoo”,                             “值”:“ nagri”                         }                     ]                 }             },             “状态”:“启用”,             “转换”:[                 {                     “天数”:20,                     “ StorageClass”:“ GLACIER”                 }             ]         }     ] }

这里有2条规则。其中一个只是删除,而另一个则发送到冰川-规则都使用标签以及示例所需的前缀

  1. 现在,在下面的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