У меня есть объект, к которому я хотел бы обратиться с использованием разных ключей без фактического копирования самого объекта, например, символическая ссылка в Linux. Предоставляет ли Amazon S3 такую вещь?
Поддерживает ли Amazon S3 символические ссылки?
Ответ 1
S3 не поддерживает понятие символической ссылки, где один ключ объекта рассматривается как псевдоним для другого ключа объекта. (Вероятно, вы слышали это раньше: S3 не является файловой системой. Это хранилище объектов).
Если вы используете статическую функцию хостинга веб-сайтов, есть частичная эмуляция этой возможности с перенаправлением на уровне объекта:
http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html
Это приводит к тому, что запросы "object-a" приветствуются с ответом 301 Moved Permanently
с URL-адресом "object-b" в заголовке Location:
, который выполняет аналогичную цель, но, конечно, другой. Он работает только в том случае, если запрос поступает на конечную точку сайта (а не конечную точку REST).
Если вы используете обратный прокси (haproxy, nginx и т.д.) в EC2 для обработки входящих запросов и пересылки их в ведро, тогда, конечно, у вас есть опция на прокси-уровне переписывания URL-адреса запроса перед пересылкой на S3, поэтому вы можете перевести входящий запрос на все, что вам нужно, чтобы представить на S3. Насколько практично это зависит от вашего приложения и мотивации, но это одна из стратегий, которые я использую для изменения того, где в конкретном ведре появляется объект, по сравнению с тем, где он фактически хранится, что позволяет мне переписывать пути на основе других атрибутов в запросе.
Ответ 2
У меня был аналогичный вопрос, и мне было необходимо решение, которое я опишу ниже. Хотя S3 не поддерживает символические ссылки, вы можете сделать это следующим образом:
echo "https://s3.amazonaws.com/my.bucket.name/path/to/a/targetfile" > file
aws s3 cp file s3://my.bucket.name/file
wget $(curl https://s3.amazonaws.com/my.bucket.name/file)
То, что это на самом деле делает, это получение содержимого файла, который на самом деле является только указателем на целевой файл, а затем передача его в wget (curl также может использоваться для перенаправления на файл вместо wget).
Это действительно просто работа, хотя это не настоящая символическая ссылка, а скорее творческое решение для имитации символических ссылок.
Ответ 3
Символьных ссылок нет, но один и тот же объект на несколько ключей, возможно.
Пожалуйста, обратитесь к ответу Родриго на Amazon S3 - Несколько ключей для одного объекта
Если вы используете сайт, обслуживающий S3, вы можете сделать это через заголовок x-amz-website-redirect-location
Если вы не используете обслуживание веб-сайта, вы можете создать свой собственный заголовок (x-amz-meta-KeyAlias
) и обработать его вручную.