部署到数千个Amazon S3帐户?

我们运行的服务是提供基于Web(PHP)的应用程序的“工作”,图像,JS,CSS等托pipe在客户自己的Amazon S3帐户上。

这样,他们就可以得到S3使用的综合账单(应用程序使用S3本身),我们不必补贴他们的带宽(没有每月的费用,所以随着它的增长,它会花费我们更多,更多钱)。

我们现在有超过1000个客户,并且推出更新(比如JS的更新)需要很长的时间,而且这个数字在未来几个月将会呈指数级增长。

我曾经考虑过我们拥有的一个源S3存储桶,然后做了COPY请求,而不是在我们的S3存储桶和他们的存储桶之间上传。 这仍然需要时间,但比现在上传要快得多。 不过,我听说没有办法在两个完全独立的S3帐户之间复制,而不使用中介服务器(这明显地击败对象并且实际上将时间加倍)。

真的吗? 任何人都可以想到一个替代方法吗?

这是一个非常好的问题。

上次我检查了甚至不同地区之间的COPY不起作用。 我知道Cloudberry的资源pipe理器应用程序具有在S3帐户之间复制数据的function,您可以使用它进行testing吗? 我没有尝试过,它只是Windows。

我猜如果它的工作,这是一个尝试API的问题。

你们都在同一地区吗? 因为如果帐号之间的COPY不起作用,我会启动一个实例(或多个)来加速这个过程。 如果每个人都在同一地区,则不需要支付带宽费用。

这并不理想,但是我想用多个实例可以花费不到10块钱完成很多工作。 而且应该也可以自动化设置。

更新

所以要详细说明EC2。 EC2实例就像另一台服务器一样。 我原来是这样build议的,所以你可以下载一次文件,并把它上传到AWS 内的其他S3账户这样你可以节省带宽(如果存储桶和实例在同一个区域,这是免费的)。

无论如何,一个EC2实例就像一个服务器,它需要一点点设置来引导它。 例如一个自定义的AMI,或任何AMI和一些user-data (传递给实例并在第一次启动时执行的shell脚本)。 您可能需要安装PHP,Amazon SDK等 – 所有这些都可以自动化。

事情是,我不完全确定你的情况是否有必要。

看看下面的示例代码: http : //docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?CopyingObjectUsingPHP.html

它显示了如何将数据从一个桶复制到另一个桶。 由于存储桶名称在所有S3中都是唯一的,因此这不成问题。 我认为您需要做的只是将文件读取给您自己的AWS账户(至less暂时)的所有人 ,然后循环并将这些文件复制到客户的AWS账户。

我认为你可以在任何地方发布这个代码,不必担心带宽费用,因为COPY应该是全部内部的。 没有下载所需的实际文件。

不知道您是否查看了文档 ,但似乎AWS需要某种源头( x-amz-copy-source ),然后将其余部分处理。

HTH