【问题标题】:Enabling versioning on multiple S3 buckets using AWSCLI使用 AWSCLI 在多个 S3 存储桶上启用版本控制
【发布时间】:2019-12-03 01:47:36
【问题描述】:

我正在尝试通过 awscli 启用版本控制;理想情况下,我会使用以下内容:

aws s3 put-bucket-versioning --bucket <bucketname> --versioning-configuration status=Enabled

但是,我们有数百个存储桶。有没有办法修改此命令以在所有现有存储桶上启用它? 提前致谢。

【问题讨论】:

    标签: linux amazon-web-services amazon-s3 aws-cli


    【解决方案1】:

    你可以试试这样的:

    aws s3 ls | cut -d' ' -f3 | xargs -L 1 aws s3 put-bucket-versioning --versioning-configuration status=Enabled --bucket
    

    这部分的第一部分只是列出所有 S3 存储桶,然后将该列表通过管道传输到 cut,后者会去除该日期和时间列表,只留下存储桶名称。然后将该存储桶名称列表通过管道传输到xargs -L 1,以针对每个存储桶名称执行后续aws 命令,一次一个。

    要添加额外的过滤,例如仅列出以proddev 结尾的存储桶,请在xargs 之前添加额外的管道命令:

    aws s3 ls | cut -d' ' -f3 | grep -E "(prod|dev)$" | xargs ...
    

    【讨论】:

    • 谢谢!如果我只想使用以 'prod' 或 'dev' 结尾的那些怎么办
    • 添加了额外的过滤示例。熟悉 Unix 中的管道以及如何使用(至少)以下内容是值得的:sort、grep、awk、sed、tr、head、tail、wc。你会发现各种各样的方法来使用它们来解决问题。
    【解决方案2】:

    对于快速单线,您可以尝试:

    for bucket in $(aws s3api list-buckets --query 'Buckets[?contains(Name, `prod`) == `true`]' --output text); do aws s3 put-bucket-versioning --bucket $bucket --versioning-configuration status=Enabled ; done
    

    这使用JMESPath 查询过滤器来挑选您需要的存储桶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多