Теперь есть 3 способа сделать это: через консоль AWS , через командную строку или через инструмент командной строки s3cmd .
Инструкции для консоли AWS
Теперь это рекомендуемое решение. Это просто, но это может занять некоторое время.
- Войдите в Консоль управления AWS.
- Перейти в ведро S3
- Выбрать все файлы по маршруту
- Выберите «Еще» в меню.
- Выберите «Изменить метаданные».
- В поле «Ключ» в раскрывающемся меню выберите «Cache-Control» max-age = 604800Введите (7 дней) для значения
- Нажмите кнопку "Сохранить"
( спасибо @biplob - пожалуйста, подарите ему немного любви ниже )
Решение командной строки AWS
Первоначально, когда я создавал эту политику корзины, я не мог пойти, поэтому я решил, как это сделать с помощью aws-cli, и это довольно гладко. При исследовании я не мог найти никаких примеров в дикой природе, поэтому решил опубликовать некоторые из своих решений, чтобы помочь нуждающимся.
ПРИМЕЧАНИЕ. По умолчанию aws-cli копирует только текущие метаданные файла, ДАЖЕ ЕСЛИ ВЫ УКАЗЫВАЕТЕ НОВЫЕ МЕТАДАННЫЕ.
Чтобы использовать метаданные, указанные в командной строке, вам необходимо добавить флаг --metadata-directive REPLACE. Вот несколько примеров.
Для одного файла
aws s3 cp s3://mybucket/file.txt s3://mybucket/file.txt --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public
Для всего ведра (обратите внимание - флаг рекурсии):
aws s3 cp s3://mybucket/ s3://mybucket/ --recursive --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public
Я обнаружил небольшую ошибку: если вы хотите применить ее только к определенному типу файлов, вам нужно исключить все файлы, а затем включить те, которые вам нужны.
Только jpgs и png:
aws s3 cp s3://mybucket/ s3://mybucket/ --exclude "*" --include "*.jpg" --include "*.png" \
--recursive --metadata-directive REPLACE --expires 2034-01-01T00:00:00Z --acl public-read \
--cache-control max-age=2592000,public
Вот несколько ссылок на руководство, если вам нужна дополнительная информация:
Известные проблемы:
"Unknown options: --metadata-directive, REPLACE"
это может быть вызвано устаревшим awscli - см . ответ @ eliotRosewater ниже
Инструмент S3cmd
S3cmd - это «инструмент командной строки для управления сервисами Amazon S3 и CloudFront». Хотя это решение требует git pull, оно может быть более простым и комплексным.
Полные инструкции см. В сообщении @ ashishyadaveee11 ниже.
Надеюсь, поможет!
cp
скачивает и заново закачивает?Теперь его можно легко изменить с консоли AWS.
Для выполнения требуется время, в зависимости от ваших файлов корзины. Если вы случайно закрыли браузер, повторите с самого начала.
источник
меры
git clone https://github.com/s3tools/s3cmd
s3cmd --configure
(Вам будет предложено ввести два ключа - скопируйте и вставьте их из электронного письма с подтверждением или со страницы своей учетной записи Amazon. Будьте осторожны при их копировании! Они чувствительны к регистру и должны вводиться точно, иначе вы будете продолжать получать ошибки о недействительности подписи и т.п. Не забудьте добавитьs3:ListAllMyBuckets
разрешения для ключей, иначеAccessDenied
при проверке доступа вы получите ошибку.)./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
источник
Если бы моя оценка репутации была> 50, я бы просто прокомментировал. Но это не так (пока), так что вот еще один полный ответ.
Я уже давно ломаю голову над этой проблемой. Пока я не нашел и не прочитал документы. Поделитесь этим здесь, если это поможет кому-то еще:
Что в итоге надежно работало для меня, так это эта команда. Я выбрал время истечения 1 секунды для тестирования, чтобы проверить ожидаемые результаты:
--metadata-directive REPLACE
требуется, когда "cp
изменении метаданных в существующем файле в S3max-age
устанавливает возраст кеширования браузера в секундахs-maxage
устанавливает кеширование CloudFront в секундахАналогичным образом, если установить эти значения заголовка Cache-Control для файла во время загрузки на S3, команда будет выглядеть так:
источник
Я не думаю, что вы можете указать это на уровне корзины, но для вас есть несколько обходных путей.
Скопируйте объект на себя на S3, задав соответствующие
cache-control
заголовки для операции копирования.Укажите заголовки ответов в URL-адресах файлов . Для этого вам необходимо использовать предварительно подписанные URL-адреса, но вы можете указать определенные заголовки ответа в строке запроса, включая
cache-control
иexpires
. Полный список доступных опций см .: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225источник
Вы всегда можете настроить лямбда с триггером для PUTOBJECT на S3, лямбда просто изменит заголовок этого конкретного объекта, который только что был помещен.
Затем вы можете запустить команду копирования, упомянутую выше, в последний раз, и все новые объекты будут исправлены лямбдой.
ОБНОВИТЬ:
Вот хорошее место для начала: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /
источник
Тем, кто пытается использовать ответ Дэна и получает сообщение об ошибке:
Я столкнулся с проблемой, и проблема заключалась в том, что я установил awscli, используя
Это установило старую версию awscli, в которой отсутствует команда --metadata-directive. Поэтому я использовал sudo apt-get remove awscli, чтобы удалить его.
Затем переустановите, следуя процедуре от Amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html
Единственная разница в том, что мне пришлось использовать sudo -H из-за проблем с разрешениями, с которыми могли столкнуться и другие.
источник