Soru S3 paketinin tamamı için önbellek denetimini otomatik olarak ayarla (kepçe ilkelerini kullanarak?)


Önceden varolan ve gelecekteki tüm dosyalar için bir s3 kovası için önbellek denetimi üstbilgileri ayarlamam gerekiyor ve bunu bir kepçe politikasında yapmayı umuyordum. Mevcut olanları düzenleyebileceğimi biliyorum ve bunları kendim yüklediğimde bunları nasıl belirleyeceğimi biliyorum ama maalesef onları yükleyen uygulama, dosyaları kopyalamak için s3fs komutunu kullandığı için başlıkları ayarlayamaz.


76
2018-05-03 16:15


Menşei




Cevaplar:


Bunu yapmanın 3 yolu var: AWS Konsolu üzerinden, komut satırı üzerindenveya s3cmd komut satırı aracıyla.


AWS Konsolu Talimatları

Bu şimdi önerilen çözümdür. Düz ileri, ama biraz zaman alabilir.

  • AWS Yönetim Konsolu'na giriş yapın
  • S3 kovasına git
  • Tüm dosyaları rotaya göre seç
  • Menüden "Daha Fazla" yı seçin
  • "Meta verileri değiştir" i seçin
  • "Anahtar" alanında, açılır menüden "Önbellek Denetimi" ni seçin. max-age = 604800Enter (7 gün) Değer
  • "Kaydet" düğmesine basın

(@CoderBoy'a teşekkürler - lütfen ona biraz sevgi verin)


AWS Komut Satırı Çözüm

Aslında, bu kepçe politikalarını oluşturduğumda hiç bir şey olmadı, bu yüzden aws-cli kullanarak nasıl yapılacağını düşündüm ve oldukça kaygan. Araştırma yaparken vahşi bir örnek bulamadım, bu yüzden bazı çözümlerimi ihtiyacım olanlara yardımcı olacağımı düşündüm.

NOT: aws-cli, varsayılan olarak, bir dosyanın mevcut meta verilerini kopyalar, YENİ METADATA'YI BELİRTİNİZ. 

Komut satırında belirtilen meta verileri kullanmak için '--metadata-directive REPLACE' etiketini eklemeniz gerekir. İşte bazı örnekler.

Tek bir dosya için

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

Tüm bir kova için (not - hızlı bayrağa):

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

Bulduğum küçük bir tuhaflık var, eğer sadece belirli bir dosya türüne uygulamak istiyorsanız, tüm dosyaları hariç tutmalı, sonra istediğinizleri dahil etmelisiniz.

Sadece jpgs ve 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

Daha fazla bilgiye ihtiyacınız varsa, kılavuzun bazı bağlantıları şunlardır:

Bilinen Sorunlar:

"Unknown options: --metadata-directive, REPLACE"

Bu bir tarih dışı awscli neden olabilir - bkz. @ eliotRosewater'ın yanıtı aşağıdadır


S3cmd aracı

S3cmd, "Amazon S3 ve CloudFront hizmetlerini yönetmek için bir komut satırı aracıdır". Bu çözüm bir git çekme gerektirse de daha basit ve kapsamlı bir çözüm olabilir.

Tam talimatlar için aşağıdan @ ashishyadaveee11'in gönderisine bakın


Umarım yardımcı olur!


121
2018-03-26 14:13



Tam olarak ne yapılması gerektiğine dair gerçek örnekler için teşekkürler. Dokümanların okunmasının bile mümkün olduğunu keşfetmekte zorlanıyordum. - danneu
Bazı tarayıcıların 2035'den sonra tarihleri ​​kabul etmediklerini düşünüyorum. Aksi halde, çok güzel, örnekler için teşekkürler. - someuser
Teşekkürler @someuser. Buna göre güncellenir. - Dan Williams
Yukarıdaki komutlardan herhangi birini çalıştırdığımda "Bilinmeyen seçenekler: --metadata-yönerge, REPLACE" alıyorum. Lütfen bana yardımcı olun. - user3722785
Not, ŞİMDİ BİR YOLCULUK YOLU VAR. Artık AWS Konsolu aracılığıyla bir kovadaki TÜM dosyalar için meta verileri değiştirebilirsiniz. Aşağıdaki CoderBoy'un cevabına bakınız: stackoverflow.com/a/47072736/2538952 - Martin Tschammer


adımlar

  1. git clone https://github.com/s3tools/s3cmd
  2. Koşmak s3cmd --configure  (İki anahtar için sorulacak - bunları kopyalayıp yapıştırın onay e-postası veya Amazon hesap sayfanızdan. Ne zaman dikkatli ol onları kopyalamak! Büyük / küçük harfe duyarlıdır ve doğru şekilde girilmelidir veya geçersiz imzalar veya benzerleri hakkında hatalar almaya devam edersiniz. Eklemeyi unutmayın s3:ListAllMyBuckets Anahtarlar için izinler veya bir AccessDenied erişim sınarken hata.)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/

18
2018-02-04 13:27



Süper cevap. Teşekkür ederim! SADECE bu başlık ayarına sahip olmayanları SADECE güncelleştirmenin bir yolu var mı? - PKHunter
Herkesin S3Express penceresi ile kullanmak için benzer bir çözümü var mı? - Joe


Şimdi, AWS konsolundan kolayca değişebilir.

  • AWS Yönetim Konsolu'na giriş yapın
  • S3 kovasına git
  • Tüm dosyaları rotaya göre seç
  • Menüden "Daha Fazla" yı seçin
  • "Meta verileri değiştir" i seçin
  • "Anahtar" alanında, açılır menüden "Önbellek Denetimi" ni seçin.
  • max-age = 604800Enter (7 gün) Değer
  • "Kaydet" düğmesine basın

Yürütme zamanınız kova dosyalarınıza bağlıdır. Tarayıcıyı yanlışlıkla kapatırsanız baştan tekrar yineleyin.


13
2017-11-02 10:17



"Tüm dosyaları rotaya göre seç" ne anlama geliyor? - Thom Blake
Meta ayarlamak istediğiniz dizinden tüm / bazı dosyaları seçin - CoderBoy
Bu gelecek yüklemeler için de işe yarayacak mı? - theyuv
Geç yanıt için üzgünüm. Hayır değil. Bunu uygulamanızdan ayarlamanız gerekir. - CoderBoy


Bunu kova düzeyinde belirtebileceğinizi sanmıyorum, ancak sizin için birkaç geçici çözüm var.

  1. Nesneyi kendisine kopyalayın S3'te uygun ayarı cache-control kopyalama işlemi için üstbilgiler.

  2. Dosyadaki URL başlıklarındaki yanıt başlıklarını belirtin. Bunun için önceden imzalanmış URL'leri kullanmanız gerekir, ancak dahil olmak üzere querystring'de belirli yanıt başlıkları belirtebilirsiniz cache-control ve expires. Mevcut seçeneklerin tam listesi için: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225


7
2018-05-04 08:28



Teşekkürler Geoff, (1) biliyordum ama değil (2). Ne için umduğum değil (bunun mümkün olmadığına inanıyorum) - thattommyhall
# 1 nasıl yapılacağına dair örnek bir AWS CLI komutunuz var mı? docs.aws.amazon.com/cli/latest/reference/s3/cp.html - dpegasusm


Şöhret puanım 50 idi, sadece yorum yapmalıydım. Ancak (henüz) değil, başka bir tam cevap var.


Bir süredir başımı bu problem üzerinde becermeye başladım. Dokümanları bulup okuyana kadar. Burada paylaşılması durumunda başkalarına yardımcı olur:

Benim için güvenilir bir şekilde sonuçlanan bu buyruk buydu. Beklenen sonuçları doğrulamak için test için 1 saniyelik bir son kullanma süresi seçtim:

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 ne zaman gereklidircp"S3'te varolan bir dosyada meta verileri değiştiriliyor
  • max-age Tarayıcı önbellekleme yaşını saniyeler içinde ayarlar
  • s-maxage CloudFront önbelleğini saniyeler içinde ayarlar

Benzer şekilde, S3'e yüklerken bu Cache-Control üstbilgi değerlerini bir dosyaya ayarlarsanız, komut şöyle görünecektir:

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

4
2018-02-01 21:53



Bu düzeltme için teşekkürler, Michael! - roens


Dan'ın cevabını kullanmaya ve hatayı almaya çalışanlara:

"Bilinmeyen seçenekler: --metadata-directive, REPLACE"

Sorunla karşılaştım ve sorun, awscli'yi kullanarak kurdum.

sudo apt-get install awscli

Bu, --metadata-directive komutunu eksik olan awscli'nin eski bir sürümünü yükledi. Bu yüzden sudo apt-get'i kaldırmak için awscli'yi kullandım.

Daha sonra prosedürü takip ederek amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html

Tek fark, sudo-H kullanmak zorunda kaldım çünkü başkalarının da girebileceği izin sorunları vardı.


1
2017-10-16 21:11





Bir lambdayı P3'te PUTOBJECT üzerinde bir tetikleyici ile her zaman yapılandırabilirsiniz, lambda sadece konulan bu nesnenin başlığını değiştirecektir.

Ardından, son bir kez yukarıda bahsedilen kopya komutunu çalıştırabilirsiniz ve tüm yeni nesneler lambda tarafından düzeltilecektir.

GÜNCELLEŞTİRME:

Buradan başlamak için iyi bir yer: 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



Bu lamba nasıl yapılacağı hakkında biraz daha bilgi verebilir misiniz? Harika bir çözüm gibi geliyor. - Wouter
@Wouter elbette, size kolayca ulaşmanıza yardımcı olabilecek bir bağlantı buldum. aaronfagan.ca/blog/2017/... Herhangi bir yardıma veya desteğe ihtiyacınız olursa, yardımcı olmaktan mutluluk duyarım. - Ibrahim Bou Ncoula
Bunun eski olduğunu biliyorum ancak bu kaynağı aradığım şey için faydalı buldum. bunun için teşekkür ederim. Senin için upvotes dostum! - castaway2000