Saya menggunakan CloudFront dari Amazon untuk menyajikan file statis aplikasi web saya.
Apakah tidak ada cara untuk memberitahu distribusi cloudfront bahwa ia perlu me-refresh file itu atau menunjukkan satu file yang harus di-refresh?
Amazon merekomendasikan agar Anda memberi versi file Anda seperti logo_1.gif, logo_2.gif dan sebagainya sebagai solusi untuk masalah ini, tetapi itu sepertinya solusi yang cukup bodoh. Apakah sama sekali tidak ada cara lain?
Jawaban:
Kabar baik. Amazon akhirnya menambahkan Fitur Pembatalan.Lihat Referensi API .
Ini adalah contoh permintaan dari Referensi API:
sumber
createInvalidation
permintaan API , saya masih melihat pembaruan membutuhkan waktu 5-10 menit atau lebih untuk membatalkan. Perhatikan saya menulis komentar ini 4 tahun setelah Anda.Pada 19 Maret, Amazon sekarang memungkinkan TTL cache Cloudfront menjadi 0 detik, sehingga Anda (secara teoritis) tidak akan pernah melihat objek basi. Jadi jika Anda memiliki aset Anda di S3, Anda bisa pergi ke AWS Web Panel => S3 => Edit Properties => Metadata, lalu atur nilai "Kontrol-Cache" Anda ke "max-age = 0".
Ini langsung dari dokumentasi API :
sumber
Dengan API Validasi, API diperbarui dalam beberapa menit.
Lihat PHP Invalidator .
sumber
Pengaturan pembaruan otomatis dalam 5 menit
Oke teman Cara terbaik yang mungkin saat ini untuk melakukan pembaruan CloudFront otomatis (tidak valid) adalah dengan membuat fungsi Lambda yang akan dipicu setiap kali setiap file diunggah ke bucket S3 (yang baru atau ditulis ulang).
Bahkan jika Anda belum pernah menggunakan fungsi lambda sebelumnya, itu sangat mudah - cukup ikuti petunjuk langkah demi langkah saya dan hanya membutuhkan 5 menit:
Langkah 1
Buka https://console.aws.amazon.com/lambda/home dan klik Buat fungsi lambda
Langkah 2
Klik pada Fungsi Kosong (khusus)
Langkah 3
Klik pada kotak kosong (dibelai) dan pilih S3 dari kombo
Langkah 4
Pilih Bucket Anda (sama seperti untuk distribusi CloudFront)
Langkah 5
Tetapkan Jenis Acara ke "Objek Dibuat (Semua)"
Langkah 6
Tetapkan Awalan dan Sufiks atau biarkan kosong jika Anda tidak tahu apa itu.
Langkah 7
Centang Enable trigger checkbox dan klik Next
Langkah 8
Namai fungsi Anda (sesuatu seperti: YourBucketNameS3ToCloudFrontOnCreateAll )
Langkah 9
Pilih Python 2.7 (atau lebih baru) sebagai Runtime
Langkah 10
Rekatkan kode berikut daripada kode python default:
Langkah 11
Buka https://console.aws.amazon.com/cloudfront/home di tab browser baru dan salin ID distribusi CloudFront Anda untuk digunakan pada langkah berikutnya.
Langkah 12
Kembali ke tab lambda dan tempel id distribusi Anda alih-alih _YOUR_DISTRIBUTION_ID_ dalam kode Python. Simpan kutipan di sekitarnya.
Langkah 13
Setel handler : lambda_function.lambda_handler
Langkah 14
Klik pada kotak kombo peran dan pilih Buat peran khusus . Tab baru di browser akan dibuka.
Langkah 15
Klik lihat dokumen kebijakan , klik edit , klik OK dan ganti definisi peran dengan yang berikut (sebagaimana adanya):
Langkah 16
Klik izinkan . Ini akan mengembalikan Anda ke lambda. Periksa ulang bahwa nama peran yang baru saja Anda buat dipilih di kotak kombo peran yang ada .
Langkah 17
Set Memory (MB) ke 128 dan Timeout ke 5 detik.
Langkah 18
Klik Berikutnya , lalu klik Buat fungsi
Langkah 19
Kamu baik untuk pergi! Sekarang, setiap kali Anda akan mengunggah / mengunggah kembali file apa pun ke S3, itu akan dievaluasi di semua lokasi CloudFront Edge.
PS - Saat Anda menguji, pastikan browser Anda memuat gambar dari CloudFront, bukan dari cache lokal.
PSS - Harap dicatat, bahwa hanya 1000 file invalidasi pertama per bulan adalah gratis, setiap invalidasi melebihi batas biaya $ 0,005 USD. Biaya tambahan untuk fungsi Lambda mungkin berlaku, tetapi sangat murah.
sumber
Bucket Explorer memiliki UI yang membuatnya sangat mudah sekarang. Begini caranya:
Klik kanan ember Anda. Pilih "Kelola Distribusi."
Klik kanan distribusi Anda. Pilih "Dapatkan daftar validasi Cloudfront" Lalu pilih "Buat" untuk membuat daftar invalidasi baru. Pilih file yang tidak valid, dan klik "Valid." Tunggu 5-15 menit.
sumber
Jika Anda telah menginstal boto (yang tidak hanya untuk python, tetapi juga menginstal banyak utilitas baris perintah yang berguna), ia menawarkan perintah baris util yang secara khusus disebut
cfadmin
atau 'cloud front admin' yang menawarkan fungsi berikut:Anda membatalkan sesuatu dengan menjalankan:
sumber
Hanya memposting untuk memberi tahu siapa pun yang mengunjungi halaman ini (hasil pertama di 'Cloudfront File Refresh') bahwa ada + online invalidator yang mudah digunakan tersedia di swook.net
Validator baru ini adalah:
Pengungkapan penuh: Saya membuat ini. Selamat bersenang-senang!
sumber
salah satu cara yang sangat mudah untuk melakukannya adalah versi FOLDER.
Jadi jika file statis Anda ratusan misalnya, cukup masukkan semuanya ke folder yang disebut tahun + versi.
misalnya saya menggunakan folder bernama 2014_v1 di mana di dalamnya saya memiliki semua file statis saya ...
Jadi di dalam HTML saya, saya selalu meletakkan referensi ke folder. (tentu saja saya punya PHP termasuk di mana saya telah menetapkan nama folder.) Jadi dengan mengubah 1 file itu sebenarnya berubah di semua file PHP saya ..
Jika saya ingin refresh lengkap, saya cukup mengganti nama folder menjadi 2014_v2 menjadi sumber saya dan mengubah di dalam php termasuk ke 2014_v2
semua HTML secara otomatis berubah dan meminta jalur baru, cache MISS cloudfront dan minta ke sumber.
Contoh: SOURCE.mydomain.com adalah sumber saya, cloudfront.mydomain.com adalah CNAME untuk distribusi cloudfront.
Jadi PHP menyebut file ini cloudfront.mydomain.com/2014_v1/javascript.js dan ketika saya ingin refresh penuh, cukup saya mengubah nama folder menjadi sumber menjadi "2014_v2" dan saya mengubah PHP termasuk dengan mengatur folder ke "2014_v2" .
Seperti ini, tidak ada penundaan untuk pembatalan dan TIDAK ADA BIAYA!
Ini adalah posting pertama saya di stackoverflow, harap saya melakukannya dengan baik!
sumber
Set TTL = 1 jam dan ganti
http://developer.amazonwebservices.com/connect/ann.jspa?annID=655
sumber
Di ruby, menggunakan permata kabut
bahkan pada saat invalidation, masih membutuhkan 5-10 menit untuk validasi untuk memproses dan me-refresh semua server edge amazon
sumber
AWS CLI saat ini mendukung pembatalan dalam mode pratinjau. Jalankan yang berikut ini di konsol Anda sekali:
Saya menggunakan proyek web saya menggunakan npm. Saya memiliki skrip berikut di
package.json
:Memiliki skrip di atas di tempat Anda dapat menyebarkan situs Anda dengan:
sumber
--paths /
ke--paths /*
. milikku juga seperti milikmu dan itu tidak membatalkan distribusi ...Jika Anda menggunakan AWS, Anda mungkin juga menggunakan alat CLI resminya (cepat atau lambat). AWS CLI versi 1.9.12 atau lebih tinggi mendukung pembatalan daftar nama file.
Pengungkapan penuh: Saya membuat ini. Selamat bersenang-senang!
sumber
Pergi ke CloudFront.
Klik pada ID / Distribusi Anda.
Klik pada Validasi.
Klik buat validasi.
Pada kotak contoh raksasa, ketik * dan klik tidak valid
Selesai
sumber