【问题标题】:Get a file into an S3 bucket in every region将文件放入每个区域的 S3 存储桶中
【发布时间】:2019-07-24 02:33:11
【问题描述】:

我有一个 .zip 文件(在 S3 存储桶中),它需要在单个账户的每个区域的 S3 存储桶中结束。

这些存储桶中的每一个都具有相同的存储桶策略,允许我的帐户将文件上传到它们,并且它们都遵循相同的命名约定,如下所示: foob​​ar-{区域}

例如:foobar-us-west-2

有没有办法做到这一点,而不需要手动将控制台中的文件拖到每个存储桶中,或者使用 aws s3api copy-object 命令 19 次?随着文件的更新,这可能需要相当频繁地发生,因此我正在寻找一种更有效的方法。

我想到的一种方法是制作一个包含我需要的所有 19 个区域的数组的 lambda,然后遍历它们以创建 19 个特定于区域的存储桶名称,每个存储桶名称都会将对象复制到其中。

有没有更好的办法?

【问题讨论】:

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


    【解决方案1】:

    只需将其放入 bash 函数中即可。通过使用 aws cli 和 jq,您可以执行以下操作;

        aws s3api list-buckets | jq -rc .Buckets[].Name | while read i; do 
          echo "Bucket name: ${i}"
          aws s3 cp your_file_name s3://${i}/
        done
    

    【讨论】:

    • 这可能有效,但不幸的是,我不能要求人们安装 jq 命令以便他们可以使用此脚本
    • 如果 install jq 太多,那么您可以随时使用 --query 选项,它是 aws cli 的一部分。请参阅 -> docs 中的一些示例
    • 例如aws s3api list-buckets --query "Buckets[].Name" 但您可能必须先忽略列表项,因为它们将是方括号。
    【解决方案2】:

    几个选项:

    • 上传时可能会触发 AWS Lambda 函数。然后它可以确认对象应该是否被复制(例如,我假设你不想复制每个上传的文件?),然后将它们复制出来。请注意,复制到所有区域可能需要很长时间。
    • 使用跨区域复制将存储桶(或子路径)的内容复制到其他存储桶。这将在上传时自动完成。
    • 编写一个 bash 脚本或小型 Python 程序以在本地运行,以将文件复制到每个位置。请注意,调用copy_object() 将文件从一个 S3 存储桶复制到另一个比上传 19 次更有效。只需上传到第一个存储桶,然后从那里复制到其他位置。

    【讨论】:

    • 跨区域复制本来是完美的,但显然它只支持复制到单个其他存储桶 - 我需要复制到多个其他存储桶
    • 我认为您可以将存储桶链接起来:A -> B -> C
    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多