Pytanie Ustaw automatyczne sterowanie pamięcią podręczną dla całego zasobnika S3 (używając zasad wiaderek?)


Potrzebuję ustawić nagłówki kontrolek pamięci podręcznej dla całego zasobu s3, zarówno istniejących, jak i przyszłych plików, i miałem nadzieję, że zrobię to w polityce zasobnika. Wiem, że mogę edytować istniejące i wiem, jak je określić, jeśli je przesłać, ale niestety aplikacja, która je przesyła, nie może ustawić nagłówków, ponieważ używa s3fs do skopiowania tam plików.


76
2018-05-03 16:15


pochodzenie




Odpowiedzi:


Istnieją teraz 3 sposoby, aby to zrobić: przez konsolę AWS, za pomocą wiersza poleceń, lub za pomocą 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 AWS Management Console
  • Przejdź do wiadra S3
  • Wybierz wszystkie pliki według trasy
  • Wybierz "Więcej" z menu
  • Wybierz "Zmień metadane"
  • W polu "Key" wybierz "Cache-Control" z rozwijanego menu max-age = 604800Enter (7 dni) dla wartości
  • Naciśnij przycisk "Zapisz"

(dzięki @CoderBoy - proszę, daj mu trochę miłości poniżej)


Rozwiązanie AWS Command Line

Początkowo, gdy tworzyłem te zasady wiadro, nie było wyjścia, więc wymyśliłem, jak to zrobić przy użyciu aws-cli, i jest całkiem sprytne. Podczas badań nie mogłem znaleźć żadnych przykładów na wolności, więc pomyślałem, że opublikuję niektóre z moich rozwiązań, aby pomóc potrzebującym.

UWAGA: Domyślnie aws-cli kopiuje tylko bieżące metadane pliku, NAWET JEŚLI WYBRASZ NOWĄ METADĘ. 

Aby użyć metadanych podanych w wierszu poleceń, należy dodać flagę "WYMIEŃ dyrektywę --metadata". Oto kilka przykładów.

Dla pojedynczego 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 wiadra (uwaga - flaga zwrotna):

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

Zauważyłem, że jeśli chcesz zastosować go tylko do określonego typu pliku, musisz wykluczyć wszystkie pliki, a następnie uwzględnić te, które chcesz.

Tylko jpgs i pngs:

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 - patrz Odpowiedź @ eliotRosewater poniżej


Narzędzie S3cmd

S3cmd to "Narzędzie linii poleceń do zarządzania usługami Amazon S3 i CloudFront". Chociaż to rozwiązanie wymaga ciągnięcia git, może to być prostsze i bardziej kompleksowe rozwiązanie.

Pełne instrukcje, zobacz post @ ashishyadaveee11 poniżej


Mam nadzieję, że to pomoże!


121
2018-03-26 14:13



Dzięki za rzeczywiste przykłady dokładnie, co robić. Miałem problem z odkryciem, co jest możliwe, po prostu czytając dokumenty. - danneu
Myślę, że niektóre przeglądarki nie akceptują dat późniejszych niż 2035. W przeciwnym razie, bardzo fajnie, dzięki za przykłady. - someuser
Dzięki @someuser. Odpowiednio zaktualizuję. - Dan Williams
Otrzymuję "Nieznane opcje: --metadata-dyrektywa, REPLACE", gdy uruchomię dowolne z powyższych poleceń. Proszę mi pomóc. - user3722785
Uwaga, JEST TERAZ ŁATWY SPOSÓB. Teraz możesz zmienić dane meta dla WSZYSTKICH plików w wiadrze za pośrednictwem konsoli AWS. Zobacz odpowiedź CoderBoy poniżej: stackoverflow.com/a/47072736/2538952 - Martin Tschammer


kroki

  1. git clone https://github.com/s3tools/s3cmd
  2. Biegać s3cmd --configure  (Zostaniesz poproszony o dwa klucze - skopiuj i wklej je ze swojego e-mail z potwierdzeniem lub ze strony konta Amazon. Bądź ostrożny, kiedy kopiowanie ich! Rozróżniają małe i wielkie litery i muszą być dokładnie wpisane lub nadal będziesz otrzymywać błędy dotyczące nieprawidłowych podpisów lub podobnych. Pamiętaj, aby dodać s3:ListAllMyBuckets uprawnienia do kluczy lub otrzymasz AccessDenied błąd podczas testowania dostępu.)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/

18
2018-02-04 13:27



Super odpowiedź. Dziękuję Ci! Czy istnieje sposób, aby TYLKO zaktualizować te, które nie mają jeszcze tego ustawienia nagłówka? - PKHunter
Ktoś ma podobne rozwiązanie do użytku z Windowsem S3Express? - Joe


Teraz może się łatwo zmienić z konsoli AWS.

  • Zaloguj się do konsoli AWS Management Console
  • Przejdź do wiadra S3
  • Wybierz wszystkie pliki według trasy
  • Wybierz "Więcej" z menu
  • Wybierz "Zmień metadane"
  • W polu "Key" wybierz "Cache-Control" z rozwijanego menu
  • max-age = 604800Enter (7 dni) dla wartości
  • Naciśnij przycisk "Zapisz"

Wykonanie zależy od plików wiadra. Ponów od początku, jeśli przypadkowo zamkniesz przeglądarkę.


13
2017-11-02 10:17



Co oznacza "wybierz wszystkie pliki według trasy"? - Thom Blake
Wybierz wszystkie / niektóre pliki z katalogu, w którym chcesz ustawić meta - CoderBoy
Czy to też działa na przyszłe przesyłanie? - theyuv
Przepraszam za spóźnioną odpowiedź. Nie, nie ma. Powinieneś ustawić go ze swojej aplikacji. - CoderBoy


Nie sądzę, że możesz określić to na poziomie kubełka, ale jest kilka obejść dla ciebie.

  1. Skopiuj obiekt do siebie na S3 ustawienie odpowiednie cache-control nagłówki operacji kopiowania.

  2. Określ nagłówki odpowiedzi w adresie URL do plików. Aby to działało, musisz użyć wstępnie podpisanych adresów URL, ale możesz określić określone nagłówki odpowiedzi w zapytaniu, w tym cache-control i expires. Aby uzyskać pełną listę dostępnych opcji, patrz: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225


7
2018-05-04 08:28



Dzięki Geoff, wiedziałem o (1) ale nie (2). Nie to, na co miałem nadzieję (choć obawiam się, że to niemożliwe) - thattommyhall
Czy masz przykład polecenia AWS CLI, jak wykonać # 1? docs.aws.amazon.com/cli/latest/reference/s3/cp.html - dpegasusm


Gdyby mój wynik reputacji był> 50, po prostu komentowałbym. Ale tak nie jest (jeszcze), więc oto kolejna pełna odpowiedź.


Od pewnego czasu walę z tym problemem. Do momentu znalezienia i przeczytania dokumentów. Udostępniam to tutaj, na wypadek, gdyby pomogło komuś innemu:

Tym, co zadziałało niezawodnie dla mnie, było to polecenie. Wybrałem 1-sekundowy czas wygaśnięcia testu, aby zweryfikować oczekiwane wyniki:

aws s3 cp \
  --metadata-directive REPLACE \
  --cache-control max-age=1,s-maxage=1 \
  s3://bucket/path/file \
  s3://bucket/path/file
  • --metadata-directive REPLACE jest wymagane, gdy "cp"modyfikowanie metadanych w istniejącym pliku w S3
  • max-age ustala wiek buforowania przeglądarki, w sekundach
  • s-maxage ustawia buforowanie CloudFront w ciągu kilku sekund

Podobnie, jeśli ustawisz wartości nagłówka Cache-Control w pliku podczas przesyłania do S3, polecenie będzie wyglądać tak:

aws s3 cp \
  --cache-control max-age=1,s-maxage=1 \
  /local/path/file \
  s3://bucket/path/file

4
2018-02-01 21:53



Dzięki za tę korektę, @michael! - roens


Do tych, którzy próbują użyć odpowiedzi Dana i uzyskać błąd:

"Nieznane opcje: --metadata-dyrektywa, REPLACE"

Wystąpił problem, a problem polegał na tym, że zainstalowałem awscli przy użyciu

sudo apt-get install awscli

To zainstalowało starą wersję awscli, w której brakuje polecenia --metadata-directive. Więc użyłem sudo apt-get remove awscli, aby go usunąć.

Następnie zainstaluj ponownie zgodnie z procedurą od amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html

Jedyna różnica polega na tym, że musiałem użyć sudo -H z powodu problemów z uprawnieniami, na które mogą również napotkać inni.


1
2017-10-16 21:11





Zawsze możesz skonfigurować lambdę z wyzwalaczem na PUTOBJECT na S3, lambda po prostu zmieni nagłówek tego właśnie obiektu, który właśnie został wstawiony.

Następnie możesz uruchomić polecenie kopiowania wspomniane powyżej po raz ostatni, a wszystkie nowe obiekty zostaną naprawione przez lambdę.

AKTUALIZACJA:

Oto dobre miejsce na początek: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects/


1
2018-06-03 21:35



Czy możesz podać więcej szczegółów, jak zrobić tę lambę? Brzmi jak świetne rozwiązanie. - Wouter
@Wewrząd, znalazłem ci link, który naprawdę może ci pomóc łatwo się tam dostać, aaronfagan.ca/blog/2017/... Jeśli potrzebujesz pomocy lub wsparcia, z chęcią pomożemy. - Ibrahim Bou Ncoula
Wiem, że to jest stare, ale znalazłem ten zasób, aby był przydatny do tego, czego szukałem. Dziękuję Ci za to. upvotes dla ciebie mój koleś! - castaway2000