Подтвердить что ты не робот

Как смонтировать ведро S3 в экземпляр EC2 и написать ему с помощью PHP?

Я работаю над проектом, который размещается на Amazon Web Services. Настройка сервера состоит из двух экземпляров EC2, одного балансировщика эластичной нагрузки и дополнительного хранилища эластичных блоков, на котором находится веб-приложение. Предполагается, что проект использует 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: Как смонтировать том S3 с соответствующими разрешениями с помощью FUSE). RioFS будет монтировать файловую систему и позволит мне писать в ведро из оболочки, но файлы, которые сохраняются с помощью PHP, не отображаются в ведре (я открыл проблему с проектом в GitHub). s3ql будет монтировать ведро, но ни один из файлов, которые уже находятся в корзине, не отображается в файловой системе.

Это команды монтирования, которые я использовал:

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/ и этот специальный пакет S3 FuelPHP: https://github.com/tomschlick/fuel-s3. Я смог получить пакет FuelPHP для перечисления доступных ведер и файлов, но сохранение файлов в ведро не удалось (но не было ошибок).

Вы когда-нибудь монтировали ведро S3 в локальной файловой системе Linux и использовали PHP для записи файла в ведро? Какой инструмент вы использовали? Если вы использовали один из вышеупомянутых инструментов, какую версию вы использовали?

ИЗМЕНИТЬ Мне сообщили, что проблема, которую я открыл с помощью RioFS в GitHub, была решена. Хотя я решил использовать S3 REST API вместо того, чтобы пытаться монтировать ведро в качестве тома, кажется, что RioFS может быть жизнеспособным вариантом в наши дни.

4b9b3361

Ответ 1

Вы когда-нибудь устанавливали ведро S3 в локальной файловой системе Linux?

Нет. Это весело для тестирования, но я бы не позволил ему приблизиться к производственной системе. Гораздо лучше использовать библиотеку для связи с S3. Вот почему:

  • Это не скроет ошибок. В файловой системе есть только несколько кодов ошибок, которые могут отправить вам сообщение о проблеме. Библиотека S3 даст вам точное сообщение об ошибке от Amazon, чтобы вы поняли, что происходит, регистрируйте его, обрабатывайте угловые случаи и т.д.
  • В библиотеке будет меньше памяти. Уровни файловых систем будут кэшировать много случайных вещей, которые вы больше никогда не используете. Библиотека позволяет вам управлять кешем, а не кешировать.
  • Expansion. Если вам когда-нибудь понадобится сделать что-нибудь интересное (установите ACL в файле, создайте подписанную ссылку, версию, жизненный цикл, долговечность и т.д.), Тогда вам придется сбрасывать абстракцию файловой системы и использовать библиотеку в любом случае.
  • Сроки и повторы. Некоторая часть запросов случайным образом выдает ошибку и может быть повторена. Иногда вам может понадобиться многократно повторить попытку, иногда вы бы скорее ошибались. Файловая система не дает вам подробный контроль, но библиотека будет.

Суть в том, что S3 в FUSE является негерметичной абстракцией. S3 не имеет (или нуждается) каталогов. Файловые системы не были созданы для миллиардов файлов. Их модели разрешений несовместимы. Вы тратите много сил на S3, пытаясь обуздать его в файловой системе.

Две случайные библиотеки PHP для общения с S3:

https://github.com/KnpLabs/Gaufrette

https://aws.amazon.com/sdkforphp/ - это полезно, если вы расширяетесь за пределы использования S3, или если вам нужно выполнить любые из понравившихся запросов, упомянутых выше.

Ответ 2

Довольно часто бывает полезно записывать файлы в том EBS, а затем принудительно выполнять публичные запросы на файл для маршрутизации через CDN CloudFront.

Таким образом, если приложение должно делать какие-либо преобразования в файл, это гораздо проще делать на локальном диске и в системе, а затем принудительно запрашивать преобразованные файлы, чтобы извлечь из источника через CloudFront.

например. если ваш пользователь загружает изображение для аватара, а для изображения аватара требуется несколько итераций для размера и обрезки, ваше приложение может создавать их на локальном томе, но все общедоступные запросы для файла будут выполняться через запрос на получение облачного источника, Таким образом, у вас есть максимальная гибкость для сохранения исходного файла (или оптимизированной версии файла), и любые последующие пользовательские запросы могут либо вытащить существующую версию из облачного фронта, либо облачный фронт направит запрос обратно в приложение и создайте все необходимые итерации.

Элементарным примером вышеперечисленного будет WordPress, который создает несколько размерных/обрезанных версий любого загруженного графического изображения в дополнение к сохранению оригинала (с учетом ограничений размера файла и/или плагинов). Плагины WordPress, поддерживающие CDN, такие как W3 Total Cache, переписывают запросы на прохождение CDN, поэтому приложению нужно создавать уникальные итерации первого запроса. Добавление контроля версий URL-адресов кэширования браузера (http://domain.tld/file.php?x123) дополнительно улучшает и использует функциональность CDN.

Если вы обеспокоены быстрым расширением размера или объема файлов томов EBS, вы можете автоматизировать процесс обрезки для редко запрашиваемых файлов или старых файлов.

Ответ 3

Мы объясним вам, как монтировать s3 bucket на экземпляр Linux как файловую систему, и вы можете управлять s3bucket (загружать/скачивать/удалять файлы) с помощью SFTP. Вы можете использовать инструменты для доступа к S3bucket с использованием протокола SFTP, такие как SFTP, WinSCP, Filezilla, cmd и т.д.

S3FS - это решение на основе FUSE (файловая система в пользовательском пространстве) для монтирования корзин Amazon S3, вы можете использовать корзину s3, так как она используется только для дисков, подключенных в качестве другого жесткого диска к системе Linux. Вы можете использовать базовые команды хранения, такие как cp, rm, mv, ls, как базовые команды Unix. Подробнее...