部署到数千个 Amazon S3 账户?

部署到数千个 Amazon S3 账户?

我们运行一项服务,通过该服务我们提供基于 Web(PHP)的应用程序的“工作”,并且图像、JS、CSS 等托管在客户自己的 Amazon S3 帐户上。

这样,他们就可以获得 S3 使用情况的综合账单(应用程序本身使用 S3),而我们不必补贴他们的带宽(没有月费,因此随着带宽的增长,我们只会花费越来越多的钱)。

我们目前有超过 1000 个客户,向他们推送更新(例如,对 JS 的更新)需要很长时间,并且这个数字在未来几个月内会呈指数增长。

我曾考虑过使用我们拥有的源 S3 存储桶,然后在我们的 S3 存储桶和他们的 S3 存储桶之间执行复制请求,而不是上传。这仍然需要时间,但比现在的上传速度快得多。但是,我听说如果不使用中间服务器,就无法在两个完全独立的 S3 帐户之间进行复制(这显然违背了初衷,实际上会使时间加倍)。

是真的吗?有人能想到其他方法来做到这一点吗?

答案1

这真是一个好问题。

上次我检查时发现,即使COPY在不同地区之间也行不通。我知道Cloudberry 的 Explorer 应用程序具有在 S3 帐户之间复制数据的功能,您可以用它测试一下吗?我还没有试过,它仅适用于 Windows。

我想,如果它有效,那就需要尝试 API。

您的所有客户都在同一地区吗?因为如果COPY账户之间不起作用,我会启动一个实例(或多个)来加快进程。如果每个人都在同一地区,则不应收取带宽费用。

这不是最理想的,但我想,使用多个实例,你可以用不到 10 美元完成很多工作。而且应该也可以实现设置自动化。

更新

详细阐述一下 EC2。EC2 实例就像另一台服务器。我最初建议这样做,这样您就可以下载文件一次并将其上传到其他 S3 帐户。之内AWS 让您节省带宽费用(如果存储桶和实例位于同一区域,则免费)。

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

问题是,我不完全确定对于你的情况这是否有必要。

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

它展示了如何将数据从一个存储桶复制到另一个存储桶。由于存储桶名称在整个 S3 中都是唯一的,所以这应该不是问题。我认为你需要做的就是给出在文件上每个人在您自己的 AWS 账户上(至少是暂时的),然后循环并将文件复制到您的客户的 AWS 账户中。

我认为您可以在任何地方发布该代码,而不必担心带宽费用,因为COPY应该全部在内部。无需下载实际文件。

不确定你是否评论过文档,但 AWS 似乎需要某种原始标头(x-amz-copy-source),然后它会处理其余部分。

高血压

相关内容