Назад | Перейти на главную страницу

Развертывание на тысячи учетных записей Amazon S3?

У нас есть сервис, с помощью которого мы обеспечиваем «работу» веб-приложения (PHP), а изображения, JS, CSS и т. Д. Размещаются в собственных учетных записях клиентов Amazon S3.

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

Сейчас у нас более 1000 клиентов, и отправка им обновлений (например, обновления JS) занимает невероятно много времени, и в ближайшие месяцы это число будет расти экспоненциально.

Я рассматривал исходную корзину S3, принадлежащую нам, а затем выполнял запросы COPY вместо загрузки между нашей корзиной S3 и их. Это все равно займет время, но будет НАМНОГО быстрее, чем загрузка прямо сейчас. Однако я слышал, что невозможно копировать между двумя полностью отдельными учетными записями S3 без использования промежуточного сервера (который, очевидно, побеждает объект и фактически удваивает время).

Это правда? Кто-нибудь может придумать альтернативный способ сделать это?

Это действительно хороший вопрос.

В последний раз проверил даже COPY между разными регионами не работало. Я знаю Приложение Cloudberry's Explorer есть функция копирования данных между учетными записями S3, можете ли вы провести с ней тест? Не пробовал, только для Windows.

Думаю, если это сработает, нужно попробовать API.

Все ли ваши клиенты находятся в одном регионе? Потому что, если COPY между учетными записями не работало, я загружал один экземпляр (или несколько), чтобы ускорить процесс. Если все находятся в одном регионе, плата за пропускную способность не взимается.

Это не идеально, но я думаю, что с несколькими экземплярами вы можете выполнить много работы менее чем за 10 долларов. Также должна быть возможность автоматизировать настройку.

Обновить

Итак, чтобы подробнее остановиться на EC2. Экземпляр EC2 похож на другой сервер. Я предложил это изначально, чтобы вы могли один раз загрузить файл и загрузить его в другие учетные записи S3. в пределах AWS, чтобы вы сэкономили на пропускной способности (это бесплатно, если сегмент и экземпляр находятся в одном регионе).

В любом случае, если экземпляр EC2 похож на сервер, для его загрузки потребуется небольшая настройка. Например. пользовательский AMI или любой AMI и некоторые user-data (сценарий оболочки передается экземпляру и выполняется при первой загрузке). Вам, вероятно, потребуется установить PHP, Amazon SDK и т. Д. - все это можно автоматизировать.

Дело в том, что я не совсем уверен, нужно ли это в вашем случае.

Посмотрите следующий пример кода: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?CopyingObjectUsingPHP.html

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

Я думаю, вы можете выпустить этот код где угодно и не беспокоиться о расходах на пропускную способность, поскольку COPY должно быть все внутреннее. Загрузка фактического файла не требуется.

Не уверен, что вы просмотрели документация, но похоже, что AWS требует какой-то заголовок источника (x-amz-copy-source), а затем он позаботится обо всем остальном.

HTH