amazon-web-services - S3 生命周期配置与使用 PowerShell 的过滤器
问题描述
我需要配置 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
解决方案
我发现使用 PowerShell 很难做到这一点,仍在研究它 - 通过 .NET 类定义 Amazon.S3.Model.LifecycleFilterPredicate 似乎很棘手。同时,如果 awscli 是您可以使用的东西,这里是可以将带有配置的 json 文件作为输入的方法:
创建以下配置并将其保存到 json 文件中:
{ "Rules": [ { "Expiration": { "Days": 50 }, "ID": "remove-60-days", "Filter": { "And": { "Prefix": "py", "标签”:[{“Key”:“未使用”,“Value”:“是”},{“Key”:“raj”,“Value”:“false”}]}},“状态”:“已启用" }, { "过期”:{“天”:26 },“ID”:“20 天内不做任何事情”,“过滤器”:{“和”:{“前缀”:“java”,“标签”:[ {“键”:“jadoo”,“值”:“nagri”}]}},“状态”:“启用”,“转换”:[{“天”:20,“存储类”:“冰川”}] } ] }26 },“ID”:“do-nothing-in-20-days”,“过滤器”:{“And”:{“Prefix”:“java”,“Tags”:[{“Key”:“jadoo” ,“值”:“nagri”}] }},“状态”:“启用”,“转换”:[{“天”:20,“存储类”:“冰川”}] }] }26 },“ID”:“do-nothing-in-20-days”,“过滤器”:{“And”:{“Prefix”:“java”,“Tags”:[{“Key”:“jadoo” ,“值”:“nagri”}] }},“状态”:“启用”,“转换”:[{“天”:20,“存储类”:“冰川”}] }] }{“和”:{“前缀”:“java”,“标签”:[{“键”:“jadoo”,“值”:“nagri”}]}},“状态”:“启用”,“转换": [ { "Days": 20, "StorageClass": "GLACIER" } } } ] }{“和”:{“前缀”:“java”,“标签”:[{“键”:“jadoo”,“值”:“nagri”}]}},“状态”:“启用”,“转换": [ { "Days": 20, "StorageClass": "GLACIER" } } } ] }jadoo", "Value": "nagri" } ] } }, "Status": "Enabled", "Transitions": [ { "Days": 20, "StorageClass": "GLACIER" } } ] }jadoo", "Value": "nagri" } ] } }, "Status": "Enabled", "Transitions": [ { "Days": 20, "StorageClass": "GLACIER" } } ] }
这里有 2 条规则。其中一个是简单地删除,另一个是发送到冰川 - 规则都使用标签以及前缀来满足您的示例需求
现在,使用下面的 CLI 和输入 json 文件:
aws s3api put-bucket-lifecycle-configuration --bucket test-bla --lifecycle-configuration file://config.json
这应该将给定的配置分配给存储桶“test-bla”我希望这会有所帮助。
-- [编辑] -- 好的 - 这是 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
推荐阅读
- python - TreeView 样式不适用于 tkinter
- java - 如何使用 Java 在 Ms Access 数据库中获取列的总和?
- c - C/C++ 使用递归从下到上打印堆栈
- spring-boot - 有没有办法将请求参数传递给 webflux 中的 /health 端点?
- c - 用于打印字符串的 ASCII(每个字符)的简单代码程序不适用于输入案例
- python - 我可以在不预先创建工作簿对象的情况下创建 Python Pandas ExcelWriter 格式吗?
- google-chrome - 为在 Chrome DevTools 中重定向的网站添加 cookie?
- typescript - Mocha --watch 在第二次运行时失败,并显示“addEventListener 不是函数”
- amazon-web-services - 无法使用 AWS S3 将域定向到静态页面
- firebase - 没有 FirebaseUser 的电子邮件验证