Câu hỏi Đặt bộ điều khiển bộ nhớ cache cho toàn bộ nhóm S3 tự động (sử dụng chính sách nhóm?)


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 tại và tương lai và hy vọng sẽ làm điều đó trong chính sách nhóm. Tôi biết tôi có thể chỉnh sửa những cái hiện có và tôi biết cách chỉ định chúng khi đặt nếu tôi tải chúng lên nhưng tiếc là ứng dụng tải lên không thể đặt tiêu đề vì nó sử dụng s3fs để sao chép tệp ở đó.


76
2018-05-03 16:15


gốc




Các câu trả lời:


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


Hướng dẫn giao diện điều khiển AWS

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

  • Đăng nhập vào AWS Management Console
  • Đi vào thùng S3
  • Chọn tất cả các tệp theo tuyến đường
  • Chọn "Khác" từ trình đơn
  • Chọn "Thay đổi siêu dữ liệu"
  • Trong trường "Khóa", chọn "Cache-Control" từ trình đơn thả xuống max-age = 604800Nhập (7 ngày) cho giá trị
  • Nhấn nút "Lưu"

(nhờ @CoderBoy - hãy cho anh ấy một số tình yêu bên dưới)


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

Ban đầu, khi tôi tạo ra các chính sách nhóm này là không đi, vì vậy tôi đã tìm cách làm điều đó bằng cách sử dụng aws-cli và nó khá mượt mà. Khi nghiên cứu tôi không thể tìm thấy bất kỳ ví dụ 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 tôi để 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, MỌI NẾU BẠN ĐẶC BIỆT MỚI METADATA. 

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

Đối với một tệp

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ộ một nhóm (lưu ý - cờ phản hồi):

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

Một chút tôi đã tìm thấy, nếu bạn chỉ muốn áp dụng nó vào một loại tập tin cụ thể, bạn cần phải loại trừ tất cả các tập tin, sau đó bao gồm những cái bạn muốn.

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

Dưới đây là một số liên kết đến hướng dẫn sử dụng 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ể được gây ra bởi một awscli lỗi thời - xem @ eliotRosewater của câu trả lời dưới đây


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". Trong khi giải pháp này yêu cầu một git kéo nó có thể là một giải pháp đơn giản và toàn diện hơn.

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


Hy vọng nó giúp!


121
2018-03-26 14:13



Cảm ơn các ví dụ thực tế về chính xác phải làm gì. Tôi đã gặp khó khăn khi khám phá những gì thậm chí có thể chỉ đọc tài liệu. - danneu
Tôi nghĩ rằng một số trình duyệt không chấp nhận ngày sau năm 2035. Nếu không, rất tuyệt, cảm ơn các ví dụ. - someuser
Cảm ơn @someuser. Tôi sẽ cập nhật cho phù hợp. - Dan Williams
Tôi nhận được "Tùy chọn không xác định: - chỉ thị siêu dữ liệu, THAY THẾ" khi tôi đang chạy bất kỳ lệnh nào ở trên.Xin vui lòng trợ giúp tôi. - user3722785
Lưu ý, CÓ BÂY GIỜ LÀ MỘT CÁCH DỄ DÀNG. Bây giờ 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 AWS Console. Xem câu trả lời của CoderBoy dưới đây: stackoverflow.com/a/47072736/2538952 - Martin Tschammer


bước

  1. git clone https://github.com/s3tools/s3cmd
  2. Chạy s3cmd --configure  (Bạn sẽ được yêu cầu cho 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. Cẩn thận khi sao chép chúng! Chúng phân biệt chữ hoa chữ thường và phải được nhập chính xác hoặc bạn sẽ tiếp tục gặp lỗi về chữ ký không hợp lệ hoặc tương tự. Nhớ thêm s3:ListAllMyBuckets quyền truy cập vào các phím hoặc bạn sẽ nhận được AccessDenied trong 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/

18
2018-02-04 13:27



Câu trả lời siêu. Cảm ơn bạn! Có cách nào để CHỈ cập nhật những người chưa có cài đặt tiêu đề này không? - PKHunter
Bất cứ ai cũng có một giải pháp tương tự để sử dụng với S3Express của cửa sổ? - Joe


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

  • Đăng nhập vào AWS Management Console
  • Đi vào thùng S3
  • Chọn tất cả các tệp theo tuyến đường
  • Chọn "Khác" từ trình đơn
  • Chọn "Thay đổi siêu dữ liệu"
  • Trong trường "Khóa", chọn "Cache-Control" từ trình đơn thả xuống
  • max-age = 604800Nhập (7 ngày) cho Giá trị
  • Nhấn nút "Lưu"

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


13
2017-11-02 10:17



"Chọn tất cả các tệp theo tuyến đường" có nghĩa là gì? - Thom Blake
Chọn tất cả / một số tệp từ thư mục bạn muốn đặt meta - CoderBoy
Điều này có làm việc cho các video tải lên trong tương lai không? - theyuv
Xin lỗi vì trả lời muộn. Không, không. Bạn nên đặt nó từ ứng dụng của bạn. - CoderBoy


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 thích hợp cache-control tiêu đề 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 phải sử dụng các url đã đăng ký trước để làm việc này nhưng bạn có thể chỉ định một số tiêu đề phản hồi nhất định trong chuỗi truy vấn bao gồm cache-control và expires. Để biết 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


7
2018-05-04 08:28



Cảm ơn Geoff, tôi biết về (1) nhưng không (2). Không phải những gì tôi đã hy vọng (mặc dù tôi sợ điều đó là không thể) - thattommyhall
Bạn có câu lệnh AWS CLI ví dụ về cách làm # 1 không? docs.aws.amazon.com/cli/latest/reference/s3/cp.html - dpegasusm


Có phải điểm số danh tiếng của tôi là> 50, tôi chỉ bình luận thôi. Nhưng nó không phải (chưa) vì vậy đây là một câu trả lời đầy đủ.


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

Điều gì đã kết thúc làm việc đáng tin cậy cho tôi là lệnh này. Tôi đã chọn thời gian hết hạn 1 giây để thử nghiệ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 REPLACE được yêu cầu khi "cp"sửa đổi siêu dữ liệu trên một tệp hiện có trong S3
  • max-age đặt tuổi bộ nhớ cache của trình duyệt, tính bằng giây
  • s-maxage đặt bộ nhớ cache CloudFront, tính bằng 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

4
2018-02-01 21:53



Cảm ơn vì sự điều chỉnh đó, @michael! - roens


Đố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: - chỉ thị siêu dữ liệu, THAY THẾ"

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

sudo apt-get cài đặt awscli

Điều này đã cài đặt một phiên bản cũ của awscli mà thiếu lệnh --metadata-directive. Vì vậy, tôi sử dụng sudo apt-get loại bỏ 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ó thể gặp phải.


1
2017-10-16 21:11





Bạn luôn có thể cấu hình một lambda với một trigger trên PUTOBJECT trên S3, lambda sẽ chỉ đơn giản là 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 một lần cuối cùng, và tất cả các đối tượng mới sẽ được sửa bởi lambda.

CẬP NHẬT:

Đây là một nơi tốt để bắt đầu từ: 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



Bạn có thể cung cấp thêm một số chi tiết về cách tạo lamba này không? Âm thanh như một giải pháp tuyệt vời. - Wouter
@ Wouter chắc chắn, tôi tìm thấy bạn một liên kết mà thực sự có thể giúp bạn đạt được điều đó một cách 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 sẽ rất sẵn lòng trợ giúp. - Ibrahim Bou Ncoula
tôi biết điều này là cũ tuy nhiên tôi thấy tài nguyên này là hữu ích cho những gì tôi đang tìm kiếm. cảm ơn vì điều này. upvotes cho bạn dude của tôi! - castaway2000