将文件放入每个区域的S3存储桶

时间:2019-03-02 04:07:04

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

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

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

例如:foobar-us-west-2

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

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

只需将其放入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

答案 1 :(得分:0)

一些选项:

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