Teraz można to zrobić na 3 sposoby: za pośrednictwem konsoli AWS , wiersza poleceń lub narzędzia wiersza poleceń s3cmd .
Instrukcje konsoli AWS
To jest teraz zalecane rozwiązanie. Jest to proste, ale może zająć trochę czasu.
- Zaloguj się do konsoli zarządzania AWS
- Przejdź do wiadra S3
- Wybierz wszystkie pliki według trasy
- Z menu wybierz „Więcej”
- Wybierz „Zmień metadane”
- W polu „Klucz” wybierz „Cache-Control” z menu rozwijanego max-age = 604800Enter (7 days) for Value
- Naciśnij przycisk „Zapisz”
( dzięki @biplob - poniżej okaż mu trochę miłości )
Rozwiązanie wiersza poleceń AWS
Pierwotnie, kiedy tworzyłem te zasady dotyczące wiadra, nie było wyjścia, więc pomyślałem, jak to zrobić za pomocą aws-cli i jest całkiem sprytny. Podczas badań nie mogłem znaleźć żadnych przykładów na wolności, więc pomyślałem, że opublikuję kilka moich rozwiązań, aby pomóc potrzebującym.
UWAGA: Domyślnie aws-cli kopiuje tylko bieżące metadane pliku, NAWET JEŚLI OKREŚLISZ NOWE METADANE.
Aby użyć metadanych określonych w wierszu poleceń, należy dodać flagę „--metadata-Directive REPLACE”. Oto kilka przykładów.
Dla jednego pliku
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
Dla całego zasobnika (uwaga - flaga rekurencyjna):
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
Trochę gotcha, które znalazłem, jeśli chcesz zastosować go tylko do określonego typu pliku, musisz wykluczyć wszystkie pliki, a następnie dołączyć te, które chcesz.
Tylko jpg i 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
Oto kilka linków do instrukcji, jeśli potrzebujesz więcej informacji:
Znane problemy:
"Unknown options: --metadata-directive, REPLACE"
może to być spowodowane nieaktualnym awscli - zobacz odpowiedź @ eliotRosewater poniżej
Narzędzie S3cmd
S3cmd to „narzędzie wiersza poleceń do zarządzania usługami Amazon S3 i CloudFront”. Chociaż to rozwiązanie wymaga git pull, może być prostszym i bardziej wszechstronnym rozwiązaniem.
Aby uzyskać pełne instrukcje, zobacz post @ ashishyadaveee11 poniżej
Mam nadzieję, że to pomoże!
cp
pobieranie i ponowne przesyłanie wszystkiego?Teraz można go łatwo zmienić z konsoli AWS.
Wykonanie zajmuje trochę czasu, w zależności od plików zasobnika. Ponów od początku, jeśli przypadkowo zamkniesz przeglądarkę.
źródło
kroki
git clone https://github.com/s3tools/s3cmd
s3cmd --configure
(zostaniesz poproszony o dwa klucze - skopiuj i wklej je z wiadomości e-mail z potwierdzeniem lub ze strony konta Amazon. Zachowaj ostrożność podczas ich kopiowania! Wielkość liter jest rozróżniana i musi być wprowadzona dokładnie, w przeciwnym razie będziesz otrzymywać błędy dotyczące nieprawidłowego podpisy itp. Pamiętaj, aby dodaćs3:ListAllMyBuckets
uprawnienia do kluczy, w przeciwnym razieAccessDenied
podczas testowania dostępu wystąpi błąd)../s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
źródło
Gdyby moja reputacja wynosiła> 50, skomentowałbym tylko. Ale to nie jest (jeszcze), więc oto kolejna pełna odpowiedź.
Od jakiegoś czasu walę głową w ten problem. Dopóki nie znalazłem i nie przeczytałem dokumentacji. Udostępnianie tego tutaj na wypadek, gdyby pomogło to komukolwiek innemu:
To polecenie okazało się dla mnie niezawodne. Wybrałem 1-sekundowy czas wygaśnięcia na testowanie w celu zweryfikowania oczekiwanych wyników:
--metadata-directive REPLACE
jest wymagany, "cp
" modyfikując metadane w istniejącym pliku w S3max-age
ustawia wiek pamięci podręcznej przeglądarki w sekundachs-maxage
ustawia buforowanie CloudFront w kilka sekundPodobnie, jeśli ustawisz te wartości nagłówka Cache-Control w pliku podczas przesyłania do S3, polecenie będzie wyglądać następująco:
źródło
Nie sądzę, aby można było to określić na poziomie zasobnika, ale istnieje kilka obejść.
Skopiuj obiekt do siebie na S3, ustawiając odpowiednie
cache-control
nagłówki dla operacji kopiowania.Określ nagłówki odpowiedzi w adresie URL do plików . Aby to zadziałało, musisz użyć wstępnie podpisanych adresów URL, ale możesz określić określone nagłówki odpowiedzi w kwerendzie, w tym
cache-control
iexpires
. Pełną listę dostępnych opcji można znaleźć pod adresem : http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225źródło
Zawsze możesz skonfigurować lambdę z wyzwalaczem na PUTOBJECT na S3, lambda po prostu zmieni nagłówek tego konkretnego obiektu, który właśnie został wstawiony.
Następnie możesz po raz ostatni uruchomić wspomniane powyżej polecenie kopiowania, a wszystkie nowe obiekty zostaną naprawione przez lambdę.
AKTUALIZACJA:
Oto dobre miejsce do rozpoczęcia: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /
źródło
Do tych, którzy próbują użyć odpowiedzi Dana i otrzymują błąd:
Natknąłem się na problem, a problem polegał na tym, że zainstalowałem awscli przy użyciu
To zainstalowało starą wersję awscli, w której brakuje polecenia --metadata-dyrektywy. Więc użyłem sudo apt-get remove awscli, aby go usunąć.
Następnie ponownie zainstalowano zgodnie z procedurą z amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html
Jedyną różnicą jest to, że musiałem użyć sudo -H ze względu na problemy z uprawnieniami, na które mogą również napotkać inni.
źródło