gpt4 book ai didi

php - 如何将 S3 存储桶挂载到 EC2 实例并使用 PHP 写入?

转载 作者:IT老高 更新时间:2023-10-28 12:09:36 31 4
gpt4 key购买 nike

我正在处理一个托管在 Amazon Web Services 上的项目。服务器设置由两个 EC2 实例、一个 Elastic Load Balancer 和一个额外的 Elastic Block Store 组成,Web 应用程序驻留在其中。该项目应该使用 S3 来存储用户上传的文件。为了这个问题,我将 S3 存储桶称为 static.example.com

我尝试过使用 s3fs (https://code.google.com/p/s3fs/wiki/FuseOverAmazon)、RioFS (https://github.com/skoobe/riofs) 和 s3ql (https://code.google.com/p/s3ql/)。 s3fs 将挂载文件系统,但不允许我写入存储桶(我在 SO 上提出了这个问题:如何使用 FUSE 安装具有适当权限的 S3 卷)。 RioFS 将挂载文件系统并让我从 shell 写入存储桶,但使用 PHP 保存的文件不会出现在存储桶中(我在 GitHub 上打开了项目的问题)。 s3ql 会挂载bucket,但是bucket中已经存在的文件不会出现在文件系统中。

这些是我使用的挂载命令:

s3fs static.example.com -ouse_cache=/tmp,allow_other /mnt/static.example.com
riofs -o allow_other http://s3.amazonaws.com static.example.com /mnt/static.example.com
s3ql mount.s3ql s3://static.example.com /mnt/static.example.com

我也尝试过使用这个 S3 类:https://github.com/tpyo/amazon-s3-php-class/还有这个 FuelPHP 特定的 S3 包:https://github.com/tomschlick/fuel-s3 .我能够让 FuelPHP 包列出可用的存储桶和文件,但是将文件保存到存储桶失败(但没有出错)。

您是否曾经在本地 linux 文件系统上挂载过 S3 存储桶并使用 PHP 成功将文件写入存储桶?你用了什么工具?如果您使用上述工具之一,您使用的是哪个版本?

编辑我被告知,我在 GitHub 上使用 RioFS 打开的问题已经解决。虽然我决定使用 S3 REST API与其尝试将存储桶挂载为卷,现在看来 RioFS 可能是一个可行的选择。

最佳答案

Have you ever mounted an S3 bucket on a local linux filesystem?

没有。测试很有趣,但我不会让它靠近生产系统。使用库与 S3 通信要好得多。原因如下:

  1. 它不会隐藏错误。文件系统只有一些错误代码可以发送给您以指示问题。 S3 库将为您提供来自 Amazon 的确切错误消息,以便您了解发生了什么、记录错误、处理极端情况等。
  2. 库将使用更少的内存。文件系统层将缓存许多您永远不会再使用的随机内容。库让您可以控制决定缓存什么,不缓存什么。
  3. 扩展。如果您需要做任何花哨的事情(在文件上设置 ACL、生成签名链接、版本控制、生命周期、更改持久性等),那么您将不得不转储文件系统抽象并使用库。
  4. 定时和重试。一部分请求随机出错,可以重试。有时您可能想重试很多次,有时您宁愿快速出错。文件系统无法为您提供精细控制,但库可以。

底线是FUSE下的S3是leaky abstraction . S3 没有(或不需要)目录。文件系统不是为数十亿个文件而构建的。他们的权限模型不兼容。您试图将 S3 硬塞到文件系统中,从而浪费了 S3 的大量功能。

用于与 S3 对话的两个随机 PHP 库:

https://github.com/KnpLabs/Gaufrette

https://aws.amazon.com/sdkforphp/ - 如果您不仅仅使用 S3 进行扩展,或者如果您需要执行上述任何花哨的请求,则此功能很有用。

关于php - 如何将 S3 存储桶挂载到 EC2 实例并使用 PHP 写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16428552/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com