【问题标题】: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 文件作为输入的方法:

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

      { “规则”:[ { “到期”:{ “天”:50 }, "ID": "remove-60-days", “筛选”: { “和”: { “前缀”:“py”, “标签”:[ { “钥匙”:“不使用”, “价值”:“是” }, { “钥匙”:“拉吉”, “值”:“假” } ] } }, “状态”:“启用” }, { “到期”:{ “天数”:26 }, "ID": "20 天内什么都不做", “筛选”: { “和”: { "前缀": "java", “标签”:[ { “钥匙”:“jadoo”, “价值”:“纳格里” } ] } }, “状态”:“启用”, “过渡”:[ { “天”:20, “存储类”:“冰川” } ] } ] }

    这里有两条规则。其中一个是简单地删除,另一个是发送到冰川 - 规则都使用标签以及您的示例需要的前缀

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-16
      • 2023-03-03
      • 2013-05-28
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 2023-01-02
      相关资源
      最近更新 更多