Đặt tự động kiểm soát bộ nhớ đệm cho toàn bộ nhóm S3 (sử dụng chính sách nhóm?)


123

Tôi cần đặt tiêu đề kiểm soát bộ nhớ cache cho toàn bộ nhóm s3, cả tệp hiện có và tệp trong tương lai và hy vọng thực hiện điều đó trong chính sách nhóm. Tôi biết mình có thể chỉnh sửa những cái hiện có và tôi biết cách chỉ định chúng nếu tôi tự tải chúng lên nhưng tiếc là ứng dụng tải chúng lên không thể đặt tiêu đề vì nó sử dụng s3fs để sao chép các tệp ở đó.

Câu trả lời:


208

Hiện có 3 cách để thực hiện việc này: qua Bảng điều khiển AWS , qua dòng lệnh hoặc thông qua công cụ dòng lệnh s3cmd .


Hướng dẫn Bảng điều khiển AWS

Đây là giải pháp được khuyến nghị. Nó là thẳng về phía trước, nhưng có thể mất một thời gian.

  • Đăng nhập vào Bảng điều khiển quản lý AWS
  • Đi vào nhóm S3
  • Chọn tất cả các tệp theo tuyến
  • Chọn "Thêm" từ menu
  • Chọn "Thay đổi siêu dữ liệu"
  • Trong trường "Khóa", chọn "Kiểm soát bộ nhớ cache" từ menu thả xuống max-age = 604800Enter (7 ngày) cho Giá trị
  • Nhấn nút "Lưu"

( cảm ơn @biplob - hãy dành tình cảm cho anh ấy bên dưới )


Giải pháp dòng lệnh AWS

Ban đầu, khi tôi tạo các chính sách nhóm này là không có tác dụng, vì vậy tôi đã tìm cách thực hiện nó bằng aws-cli, và nó khá trơn tru. Khi nghiên cứu, tôi không thể tìm thấy bất kỳ ví dụ nào trong tự nhiên, vì vậy tôi nghĩ rằng tôi sẽ đăng một số giải pháp của mình để giúp những người cần.

LƯU Ý: Theo mặc định, aws-cli chỉ sao chép siêu dữ liệu hiện tại của tệp, NGAY CẢ NẾU BẠN CỤ THỂ DỮ LIỆU MỚI.

Để sử dụng siêu dữ liệu được chỉ định trên dòng lệnh, bạn cần thêm cờ '--metadata-directive REPLACE'. Đây là một số ví dụ.

Đối với một tệp duy nhất

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

Đối với toàn bộ nhóm (lưu ý - cờ đệ quy):

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

Tôi tìm thấy một chút hiểu biết nhỏ, nếu bạn chỉ muốn áp dụng nó cho một loại tệp cụ thể, bạn cần phải loại trừ tất cả các tệp, sau đó bao gồm những tệp bạn muốn.

Chỉ jpgs và 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

Dưới đây là một số liên kết đến sách hướng dẫn nếu bạn cần thêm thông tin:

Các vấn đề đã biết:

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

điều này có thể do awscli lỗi thời - xem câu trả lời của @ eliotRosewater bên dưới


Công cụ S3cmd

S3cmd là một "Công cụ dòng lệnh để quản lý các dịch vụ Amazon S3 và CloudFront". Mặc dù giải pháp này yêu cầu git pull, nhưng nó có thể là một giải pháp đơn giản và toàn diện hơn.

Để được hướng dẫn đầy đủ, hãy xem bài đăng của @ ashishyadaveee11 bên dưới


Hy vọng nó giúp!


6
Cảm ơn những ví dụ thực tế về chính xác những gì cần làm. Tôi đã gặp khó khăn trong việc khám phá những gì thậm chí có thể thực hiện được chỉ cần đọc tài liệu.
danneu

2
Tôi nhận được "Tùy chọn không xác định: --metadata-directive, REPLACE" khi tôi đang chạy bất kỳ lệnh nào ở trên. Vui lòng giúp tôi.
user3722785

1
Lưu ý, BÂY GIỜ CÓ MỘT CÁCH DỄ DÀNG HƠN. Giờ đây, bạn có thể thay đổi dữ liệu meta cho TẤT CẢ các tệp trong một nhóm thông qua Bảng điều khiển AWS. Xem câu trả lời CoderBoy của dưới đây: stackoverflow.com/a/47072736/2538952
Martin Tschammer

1
Lưu ý rằng việc sử dụng --meta-directive REPLACE sẽ ghi đè lên mọi siêu dữ liệu trước đó không được sao chép trong lệnh! Ví dụ: "gzip mã hóa nội dung" sẽ bị xóa khi không được thêm rõ ràng vào lệnh cp.
Harmen Janssen

1
cptải xuống và tải lên lại mọi thứ không?
mlissner

37

Giờ đây, nó có thể thay đổi dễ dàng từ bảng điều khiển AWS.

  • Đăng nhập vào Bảng điều khiển quản lý AWS
  • Đi vào nhóm S3
  • Chọn tất cả các tệp theo tuyến
  • Chọn "Thêm" từ menu
  • Chọn "Thay đổi siêu dữ liệu"
  • Trong trường "Khóa", chọn "Kiểm soát bộ nhớ cache" từ menu thả xuống
  • max-age = 604800Enter (7 ngày) cho Giá trị
  • Nhấn nút "Lưu"

Mất thời gian để thực thi tùy thuộc vào các tệp nhóm của bạn. Làm lại từ đầu nếu bạn vô tình đóng trình duyệt.


6
"Chọn tất cả các tệp theo tuyến" nghĩa là gì?
Tamzin Blake

1
Chọn tất cả / một số tập tin từ thư mục mà bạn muốn thiết lập meta
biplob

Xin lỗi vì trả lời muộn. Không, nó không. Bạn nên đặt nó từ ứng dụng của mình.
biplob

Điều này có thay thế siêu dữ liệu trước đó hoặc thêm vào nó không? (Tôi không muốn mất tất cả các loại nội dung của mình!)
Chris

Tôi chỉ xác nhận rằng nó KHÔNG xóa các giá trị hiện có. Chỉ đặt các khóa bạn chỉ định (ghi đè khóa nếu nó tồn tại)
rynop

21

các bước

  1. git clone https://github.com/s3tools/s3cmd
  2. Run s3cmd --configure (Bạn sẽ được yêu cầu cung cấp hai khóa - sao chép và dán chúng từ email xác nhận hoặc từ trang tài khoản Amazon của bạn. Hãy cẩn thận khi sao chép chúng! Chúng có phân biệt chữ hoa chữ thường và phải được nhập chính xác, nếu không bạn sẽ tiếp tục gặp lỗi về không hợp lệ chữ ký hoặc tương tự. Hãy nhớ thêm s3:ListAllMyBucketsquyền vào các khóa, nếu không bạn sẽ gặp AccessDeniedlỗi khi kiểm tra quyền truy cập.)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/

Câu trả lời cao siêu. Cảm ơn bạn! Có cách nào để CHỈ cập nhật những trang chưa có cài đặt tiêu đề này không?
PKHunter

Có ai có giải pháp tương tự để sử dụng với S3Express của window không?
Joe

12

Nếu điểm danh tiếng của tôi> 50, tôi chỉ nhận xét. Nhưng nó chưa (chưa) nên đây là một câu trả lời đầy đủ khác.


Tôi đã đập đầu vào vấn đề này trong một thời gian. Cho đến khi tôi tìm thấy và đọc tài liệu. Chia sẻ điều đó ở đây trong trường hợp nó giúp ích cho bất kỳ ai khác:

Điều cuối cùng làm cho tôi đáng tin cậy là lệnh này. Tôi đã chọn thời gian hết hạn 1 giây để thử nghiệm nhằm xác minh kết quả mong đợi:

aws s3 cp \
  --metadata-directive REPLACE \
  --cache-control max-age=1,s-maxage=1 \
  s3://bucket/path/file \
  s3://bucket/path/file
  • --metadata-directive REPLACElà bắt buộc khi " cp" sửa đổi siêu dữ liệu trên tệp hiện có trong S3
  • max-age đặt tuổi vào bộ nhớ đệm của Trình duyệt, tính bằng giây
  • s-maxage đặt bộ nhớ đệm CloudFront, trong vài giây

Tương tự như vậy, nếu đặt các giá trị tiêu đề Cache-Control này trên một tệp trong khi tải lên S3, lệnh sẽ giống như sau:

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

8

Tôi không nghĩ rằng bạn có thể chỉ định điều này ở cấp độ nhóm nhưng có một vài cách giải quyết cho bạn.

  1. Sao chép đối tượng vào chính nó trên S3, thiết lập cache-controltiêu đề thích hợp cho thao tác sao chép.

  2. Chỉ định tiêu đề phản hồi trong url cho các tệp . Bạn cần sử dụng các url được ký trước để điều này hoạt động nhưng bạn có thể chỉ định các tiêu đề phản hồi nhất định trong chuỗi truy vấn bao gồm cache-controlexpires. Để có danh sách đầy đủ các tùy chọn có sẵn, hãy xem: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225


Cảm ơn Geoff, tôi đã biết về (1) nhưng không phải (2). Không phải những gì tôi đã hy vọng (mặc dù tôi sợ rằng điều đó là không thể)
thattommyhall

Bạn có lệnh AWS CLI ví dụ về cách thực hiện số 1 không? docs.aws.amazon.com/cli/latest/reference/s3/cp.html
dpegasusm

3

Bạn luôn có thể định cấu hình lambda với trình kích hoạt trên PUTOBJECT trên S3, lambda sẽ chỉ thay đổi tiêu đề của đối tượng cụ thể này vừa được đặt.

Sau đó, bạn có thể chạy lệnh sao chép được đề cập ở trên lần cuối và tất cả các đối tượng mới sẽ được lambda sửa.

CẬP NHẬT:

Đây là một nơi tốt để bắt đầu: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /


Bạn có thể cung cấp thêm một số chi tiết về cách làm món lamba này không? Nghe có vẻ như một giải pháp tuyệt vời.
Wouter,

1
@Wouter chắc chắn, tôi đã tìm thấy cho bạn một liên kết thực sự có thể giúp bạn đến đó dễ dàng, aaronfagan.ca/blog/2017/… Nếu bạn cần bất kỳ sự giúp đỡ hoặc hỗ trợ nào, tôi rất sẵn lòng trợ giúp.
Ibrahim Bou Ncoula 21/07/17

tôi biết điều này đã cũ nhưng tôi thấy tài nguyên này hữu ích cho những gì tôi đang tìm kiếm. cảm ơn vì điều này. ủng hộ cho bạn dude của tôi!
castaway2000

1

Đối với những người cố gắng sử dụng câu trả lời của Dan và nhận được lỗi:

"Tùy chọn không xác định: --metadata-directive, REPLACE"

Tôi gặp sự cố và vấn đề là tôi đã cài đặt awscli bằng cách sử dụng

sudo apt-get install awscli

Điều này đã cài đặt một phiên bản awscli cũ bị thiếu lệnh --metadata-directive. Vì vậy, tôi đã sử dụng sudo apt-get remove awscli để loại bỏ nó.

Sau đó, cài đặt lại theo quy trình từ amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html

Sự khác biệt duy nhất là tôi đã phải sử dụng sudo -H vì các vấn đề về quyền mà những người khác cũng có thể gặp phải.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.