Sekarang ada 3 cara untuk menyelesaikan ini: melalui Konsol AWS , melalui baris perintah , atau melalui alat baris perintah s3cmd .
Instruksi Konsol AWS
Ini sekarang adalah solusi yang direkomendasikan. Ini jelas, tetapi dapat memakan waktu.
- Masuk ke AWS Management Console
- Masuk ke bucket S3
- Pilih semua file dengan rute
- Pilih "Lainnya" dari menu
- Pilih "Ubah metadata"
- Di kolom "Key", pilih "Cache-Control" dari menu drop-down max-age = 604800Enter (7 hari) untuk Nilai
- Tekan tombol "Simpan"
( terima kasih kepada @biplob - tolong beri dia cinta di bawah )
Solusi AWS Command Line
Awalnya, ketika saya membuat kebijakan ember ini tidak ada jalannya, jadi saya memikirkan cara melakukannya menggunakan aws-cli, dan ini cukup apik. Ketika meneliti, saya tidak dapat menemukan contoh apa pun di alam liar, jadi saya pikir saya akan memposting beberapa solusi saya untuk membantu mereka yang membutuhkan.
CATATAN: Secara default, aws-cli hanya menyalin metadata file saat ini, BAHKAN JIKA ANDA MENENTUKAN METADATA BARU.
Untuk menggunakan metadata yang ditentukan pada baris perintah, Anda perlu menambahkan tanda '--metadata-directive REPLACE'. Berikut ini beberapa contohnya.
Untuk satu file
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
Untuk seluruh bucket (note --recursive flag):
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
Sedikit gotcha saya temukan, jika Anda hanya ingin menerapkannya ke jenis file tertentu, Anda perlu mengecualikan semua file, lalu sertakan yang Anda inginkan.
Hanya jpg dan 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
Berikut adalah beberapa tautan ke manual jika Anda membutuhkan info lebih lanjut:
Masalah Dikenal:
"Unknown options: --metadata-directive, REPLACE"
ini dapat disebabkan oleh awscli yang sudah kadaluwarsa - lihat jawaban @ eliotRosewater di bawah
Alat S3cmd
S3cmd adalah "Alat baris perintah untuk mengelola layanan Amazon S3 dan CloudFront". Meskipun solusi ini membutuhkan git pull, ini mungkin solusi yang lebih sederhana dan lebih komprehensif.
Untuk instruksi lengkap, lihat posting @ ashishyadaveee11 di bawah ini
Semoga membantu!
cp
download dan upload ulang semuanya?Sekarang, itu dapat berubah dengan mudah dari konsol AWS.
Perlu waktu untuk mengeksekusinya bergantung pada file bucket Anda. Ulangi dari awal jika Anda tidak sengaja menutup browser.
sumber
Langkah
git clone https://github.com/s3tools/s3cmd
s3cmd --configure
(Anda akan diminta untuk dua kunci - salin dan tempel dari email konfirmasi Anda atau dari halaman akun Amazon Anda. Hati-hati saat menyalinnya! Mereka peka huruf kapital dan harus dimasukkan secara akurat atau Anda akan terus mendapatkan kesalahan tentang tidak valid tanda tangan atau yang serupa. Ingatlah untuk menambahkans3:ListAllMyBuckets
izin ke kunci atau Anda akan mendapatkanAccessDenied
kesalahan saat menguji akses.)./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
sumber
Jika skor reputasi saya> 50, saya hanya akan berkomentar. Tapi ini belum (belum) jadi inilah jawaban lengkap lainnya.
Saya telah membenturkan kepala saya pada masalah ini untuk sementara waktu sekarang. Sampai saya menemukan & membaca dokumennya. Berbagi itu di sini kalau-kalau itu membantu orang lain:
Apa yang akhirnya berhasil dengan andal bagi saya adalah perintah ini. Saya memilih waktu kedaluwarsa 1 detik untuk pengujian guna memverifikasi hasil yang diharapkan:
--metadata-directive REPLACE
diperlukan saat "cp
" mengubah metadata pada file yang ada di S3max-age
menyetel usia cache Browser, dalam hitungan detiks-maxage
mengatur cache CloudFront, dalam hitungan detikDemikian juga, jika mengatur nilai header Kontrol-Cache ini pada file saat mengunggah ke S3, perintahnya akan terlihat seperti:
sumber
Saya tidak berpikir Anda dapat menentukan ini di level bucket tetapi ada beberapa solusi untuk Anda.
Salin objek ke dirinya sendiri di S3 dengan menyetel
cache-control
header yang sesuai untuk operasi penyalinan.Tentukan header tanggapan di url ke file . Anda perlu menggunakan url yang sudah ditandatangani sebelumnya agar ini berfungsi, tetapi Anda dapat menentukan header respons tertentu di querystring termasuk
cache-control
danexpires
. Untuk daftar lengkap opsi yang tersedia lihat: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225sumber
Anda selalu dapat mengonfigurasi lambda dengan pemicu pada PUTOBJECT di S3, lambda hanya akan mengubah header dari objek khusus ini yang baru saja diletakkan.
Kemudian Anda dapat menjalankan perintah salin yang disebutkan di atas untuk terakhir kalinya, dan semua objek baru akan diperbaiki oleh lambda.
MEMPERBARUI:
Berikut adalah tempat yang baik untuk memulai: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /
sumber
Untuk mereka yang mencoba menggunakan jawaban Dan dan mendapatkan kesalahan:
Saya mengalami masalah, dan masalahnya adalah saya menginstal awscli menggunakan
Ini menginstal versi lama dari awscli yang tidak memiliki perintah --metadata-directive. Jadi saya menggunakan sudo apt-get remove awscli untuk menghapusnya.
Kemudian instal ulang mengikuti prosedur dari amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html
Satu-satunya perbedaan adalah saya harus menggunakan sudo -H karena masalah izin yang mungkin dihadapi orang lain juga.
sumber