Как добавить контроль кэша в AWS S3?
Я переместил 20000 файлов в AWS S3 по команде s3cmd. Теперь я хочу добавить кеш-контроль для всех изображений (.jpg)
Эти файлы находятся в ( s3://bucket-name/images/). Как я могу добавить контроль кэша для всех изображений с помощью s3cmd или есть другой способ добавить заголовок?
Спасибо
10 ответов
Пожалуйста, попробуйте текущую главную ветку основной ветки разработки ( https://github.com/s3tools/s3cmd), так как теперь она имеет modify
Команда, используемая следующим образом:
./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/
Также с собственным клиентом AWS:
aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800
В моем ведре есть mp4, jpg и другие файлы. Файлы, которые я хотел обновить, хранятся в "вложенной корзине" (например: https://s3.amazonaws.com/my.bucket/sub-directory/my-video.mp4). В моем случае я хотел обновить только элемент управления кэшированием файлов mp4:
aws s3 cp \
s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
--exclude '*.jpg' --exclude '*.png' \
--cache-control 'max-age=31104000' \
--recursive
Чтобы проверить, что это будет делать, вы можете использовать --dryrun
флаг:
aws s3 cp --dryrun \
s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
--exclude '*.jpg' --exclude '*.png' \
--cache-control 'max-age=31104000' \
--recursive
Чтобы настроить метаданные, такие как управление кешем для объекта в S3, без необходимости повторно загружать его и без использования каких-либо сторонних инструментов, вы можете сделать следующее с CLI AWS. Он копирует объект в себя, переопределяя метаданные с выбранными вами настройками:
aws s3api copy-object --copy-source <bucket-name>/<file> --bucket <bucket-name> --key <file> --metadata-directive REPLACE --cache-control "max-age=3600"
Обработайте эту команду в находке, чтобы сделать это для существующего набора файлов, который уже существует в корзине, как вы упомянули:
find . -type f -exec aws s3api copy-object --copy-source <bucket-name>/{} --bucket <bucket-name> --key {} --metadata-directive REPLACE --cache-control "max-age=3600"
замещать <bucket-name>
с именем вашего ведра
ВНИМАНИЕ: это перезапишет все ваши существующие метаданные в файлах, таких как acl, просто добавьте дополнительные флаги в команду, например: --acl public-read
установить то, что вам нужно (спасибо @jackson)
Если вы хотите избежать использования сторонних инструментов, а это разовая задача, вы можете использовать консоль AWS.
- Перейдите к своему ведру s3
- Выберите все объекты, которые хотите изменить
- Нажмите Действия -> Изменить метаданные.
- Выберите Cache-Control для ключа, введите любой элемент управления, который хотите, в качестве значения
- Сохранить
PUT / ObjectName HTTP/1.1
Host: BucketName .s3.amazonaws.com
Date: date
x-amz-meta-Cache-Control : max-age= <value in seconds>
Authorization: signatureValue
Каждый параметр метаданных содержит пару ключ-значение. Ключ метаданных контроля кэша - "Контроль кэша", а значение - “max-age=<time for which you want your object to be accessed from cache in seconds>”
Вы можете установить пользовательский заголовок Cache Control для объектов Amazon S3, отправив HTTP-запрос PUT на сервер Amazon S3 с соответствующими заголовками двумя способами:
Установка метаданных управления кэшем с помощью запроса объекта PUT API Amazon S3 REST. Если вы программист, вы можете написать свою собственную программу для использования API-интерфейсов Amazon S3 REST или SOAP для установки пользовательских заголовков с запросом объекта PUT. Этот веб-сайт относится только к API Amazon S3 REST. Подробную информацию об использовании API-интерфейсов SOAP см. На веб-сайте документации AWS. Установка метаданных управления кэшем с помощью пользовательского интерфейса Bucket Explorer. Если вы хотите настраивать пользовательские заголовки HTTP, такие как управление кэшем, используя щелчки мыши вместо написания программ, вы можете использовать для этого пользовательский интерфейс Bucket Explorer. С помощью этого пользовательского HTTP-заголовка вы можете указать поведение кэширования, которое должно соблюдаться в цепочке запросов / ответов, и предотвращать вмешательство кэшей в запрос или ответ.
Для получения дополнительной информации, пожалуйста, проверьте Как установить заголовок управления кэшем для объекта Amazon S3?`
(Так как ОП попросил любой другой способ)
Вы также можете сделать это через aws-cli
например, (v: aws-cli/1.8.8 Python/2.7.2 Darwin/12.5.0
):
aws s3api put-object \
--bucket mybucket \
--key my/key \
--cache-control max-age=1 \
--body myfile.txt
Хотя обратите внимание, что вы перепишете любой существующий объект.
Это, честно говоря, лучший способ избежать ошибок, упомянутых в других ответах:
aws s3 cp s3://my-bucket/ s3://my-bucket/ --recursive --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public
Другой действительно простой способ сделать это - использовать S3 Browser: http://s3browser.com/ Вы можете просто сместить щелчок или ctrl+a, чтобы выбрать все изображения, которые вы хотите; затем просто перейдите на вкладку "Заголовки Http" и нажмите "Добавить новый заголовок" и затем "Применить изменения". Он автоматически сохранил все остальные мои разрешения и заголовки.
Если вы используете S3 много; В любом случае, это прекрасное приложение, особенно если у вас огромные загрузки (нет ничего лучше в мире ftp, dropbox или чего-то еще!)