【问题标题】:S3 Lifecycle Configuration with filters using PowerShellS3 生命周期配置与使用 PowerShell 的过滤器
【发布时间】:2019-09-03 16:04:03
【问题描述】:
我需要配置 AWS S3 生命周期管理策略,以在 60 天后将包含带有键“Virginia”且其值为“True”的对象标签的所有备份移动到 AWS Glacier。我有以下 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
【问题讨论】:
标签:
amazon-web-services
powershell
amazon-s3
【解决方案1】:
我发现使用 PowerShell 很难做到这一点,仍在努力 - 通过 .NET 类定义 Amazon.S3.Model.LifecycleFilterPredicate 似乎很棘手。同时,如果您可以使用 awscli,以下是可以将带有配置的 json 文件作为输入的方法:
-
创建以下配置并将其保存到 json 文件中:
{
“规则”:[
{
“到期”:{
“天”:50
},
"ID": "remove-60-days",
“筛选”: {
“和”: {
“前缀”:“py”,
“标签”:[
{
“钥匙”:“不使用”,
“价值”:“是”
},
{
“钥匙”:“拉吉”,
“值”:“假”
}
]
}
},
“状态”:“启用”
},
{
“到期”:{
“天数”:26
},
"ID": "20 天内什么都不做",
“筛选”: {
“和”: {
"前缀": "java",
“标签”:[
{
“钥匙”:“jadoo”,
“价值”:“纳格里”
}
]
}
},
“状态”:“启用”,
“过渡”:[
{
“天”:20,
“存储类”:“冰川”
}
]
}
]
}
这里有两条规则。其中一个是简单地删除,另一个是发送到冰川 - 规则都使用标签以及您的示例需要的前缀
-
现在,使用下面的 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