2009-07-06 20 views
14

Có cách nào để cập nhật các tệp được lưu trữ trên Amazon CloudFront (dịch vụ CDN của Amazon) không? Có vẻ như nó sẽ không thực hiện bất kỳ cập nhật nào của tệp chúng tôi thực hiện (ví dụ: xóa tệp và lưu tệp mới có cùng tên tệp như trước). Tôi có phải kích hoạt một cách rõ ràng quy trình cập nhật để xóa các tệp khỏi máy chủ cạnh để có được nội dung tệp mới được xuất bản không?Làm cách nào để cập nhật tệp trên CDN của Amazon (CloudFront)?

Nhờ sự giúp đỡ của bạn

+0

Vui lòng thử đặt câu hỏi này tại http://serverfault.com/. –

Trả lời

12

Amazon bổ sung một tính năng Chấm dứt hiệu lực. This is API Reference.

Mẫu Yêu cầu từ các tham khảo API:

POST /2010-08-01/distribution/[distribution ID]/invalidation HTTP/1.0 
Host: cloudfront.amazonaws.com 
Authorization: [AWS authentication string] 
Content-Type: text/xml 

<InvalidationBatch> 
    <Path>/image1.jpg</Path> 
    <Path>/image2.jpg</Path> 
    <Path>/videos/movie.flv</Path> 
    <CallerReference>my-batch</CallerReference> 
</InvalidationBatch> 
1

tôi dường như nhớ thấy điều này trên serverfault đã có, nhưng đây là câu trả lời:

By "Amazon CDN" Tôi giả sử bạn có nghĩa là "CloudFront"?

Nó được lưu trong bộ nhớ cache, vì vậy nếu bạn cần nó được cập nhật ngay bây giờ (trái ngược với "phiên bản mới sẽ hiển thị trong 24 giờ"), bạn sẽ phải chọn một tên mới. Thay vì "logo.png", hãy sử dụng "logo.png - 0", sau đó cập nhật nó bằng cách sử dụng "logo.png - 1" và thay đổi html của bạn để trỏ đến điều đó.

Không có cách nào để "tuôn ra" đám mây amazon.

Chỉnh sửa: không thể, bây giờ là không thể. Xem nhận xét cho trả lời này.

+3

Điều này không còn chính xác nữa. – ceejayoz

+0

Xem http://stackoverflow.com/questions/1268158/force-cloudfront-distribution-file-update – RSG

+0

Điều này là không đúng, bạn có thể cập nhật nội dung bằng cách thương lượng bộ nhớ cache – rsabir

2
+0

Nơi để xác định điều đó? –

+0

Bạn có thể đặt TTL trên chi tiết phân phối trên đám mây, trong tab "Hành vi". Kích hoạt tính năng "Object Caching" = "Customize" và bạn sẽ có thể thiết lập mặc định cho việc phân phối. TTL ngắn là tốt trong khi tích cực phát triển, nhưng thời gian nên được kéo dài nếu không có nhiều cập nhật. – Cody

1

Trong ruby, sử dụng sương mù đá quý

AWS_ACCESS_KEY = ENV['AWS_ACCESS_KEY_ID'] 
AWS_SECRET_KEY = ENV['AWS_SECRET_ACCESS_KEY'] 
AWS_DISTRIBUTION_ID = ENV['AWS_DISTRIBUTION_ID'] 

conn = Fog::CDN.new(
    :provider => 'AWS', 
    :aws_access_key_id => AWS_ACCESS_KEY, 
    :aws_secret_access_key => AWS_SECRET_KEY 
) 

images = ['/path/to/image1.jpg', '/path/to/another/image2.jpg'] 

conn.post_invalidation AWS_DISTRIBUTION_ID, images 

ngay cả trên vô hiệu, nó vẫn mất 5-10 phút để việc hủy bỏ hiệu lực xử lý và làm mới trên tất cả các máy chủ cạnh amazon

13

Đây là cách tôi làm điều đó bằng bảng điều khiển CloudFront.

  1. Chọn CloudFront từ danh sách dịch vụ.
  2. Đảm bảo Phân phối từ trên cùng bên trái được chọn.
  3. Tiếp theo nhấp vào liên kết cho phân phối được liên kết từ danh sách (trong id).

enter image description here

  1. Chọn Invalidations tab.
  2. Nhấp vào nút Tạo Invalidation và nhập vị trí của các tệp bạn muốn bị vô hiệu (cập nhật).

Ví dụ:

enter image description here

  1. Sau đó nhấp vào nút làm mất hiệu lựcvà bây giờ bạn sẽ thấy InProgress dưới trạng thái.

enter image description here

Nó thường mất 10 đến 15 phút để hoàn thành yêu cầu huỷ bỏ hiệu lực của bạn, tùy thuộc vào kích thước yêu cầu của bạn.

Sau khi hoàn thành, bạn đã sẵn sàng.

Mẹo: Một khi bạn đã tạo ra một vài invalidations nếu bạn quay trở lại và cần phải vô hiệu hóa các tập tin cùng sử dụng hộp chọn và Sao chép liên kết sẽ trở nên có sẵn làm cho nó thậm chí còn nhanh hơn.

+1

Lưu ý: Bạn phải vô hiệu hóa các tệp được lưu trong bộ nhớ cache trước khi tải lên các tệp mới. Tôi gặp sự cố khi tải tệp cập nhật để được đẩy ra khi tôi tải lên bản sửa đổi, sau đó vô hiệu hóa bộ nhớ cache cũ. – Cody

+1

Tôi thực sự tìm thấy đối diện tôi đảm bảo tải lên tệp mới của mình và sau đó chạy tính vô hiệu. – CoalaWeb

Các vấn đề liên quan