2012-08-29 40 views
16

Tôi biết cách hết hạn đối tượng trong thùng S3 bằng cách sử dụng quy tắc hết hạn đối tượng cho một tiền tố nhất định, tuy nhiên với mục đích của mình, tôi muốn đặt ngày hết hạn theo chương trình trên cơ sở đối tượng.s3 cho mỗi đối tượng hết hạn

SDK Java dường như cho biết điều này là có thể vì nó có phương thức setExpirationTime, tuy nhiên bất cứ khi nào tôi đặt Ngày hết hạn sử dụng phương pháp này, dường như không có gì xảy ra và đối tượng không bao giờ hết hạn. Ngoài ra, nhìn vào các thuộc tính đối tượng thông qua giao diện điều khiển aws, không có thời hạn xuất hiện được thiết lập.

Mỗi tệp hết hạn không được hỗ trợ?/Tôi có cần thực hiện thêm bất kỳ bước nào để làm cho nó hoạt động không?/Nếu mỗi lần hết hạn tệp không được hỗ trợ, có thể loại trừ tệp phù hợp với tiền tố hết hạn không bị hết hạn không?

Cảm ơn trước!

Trả lời

8

Không giống như per- object expiration được hỗ trợ, mà là cấu hình vòng đời trên mỗi nhóm với tối đa 100 quy tắc cho mỗi cấu hình, như bạn đã tìm thấy.

Một thùng có một cấu hình vòng đời. Cấu hình vòng đời có thể có tối đa 100 quy tắc.

Giá trị lâu dài phải là số nguyên dương không phải là số không. Amazon S3 tính toán thời gian hết hạn bằng cách thêm khoảng thời gian hết hạn được chỉ định trong quy tắc cho thời gian tạo đối tượng và làm tròn kết quả là thời gian đến ngày hôm sau nửa đêm UTC.

Nếu hết hạn tệp không được hỗ trợ, có thể loại trừ tệp khớp với tiền tố hết hạn không?

Dường như bạn cũng không thể chồng chéo quy tắc.

Cẩn thận để đảm bảo các quy tắc không trùng lặp. Ví dụ: cấu hình vòng đời sau có quy tắc đặt đối tượng có tiền tố "tài liệu" hết hạn sau 30 ngày. Cấu hình cũng có một quy tắc khác đặt đối tượng có tiền tố "tài liệu/2011" thành hết hạn sau 365 ngày. Trong trường hợp này, Amazon S3 trả về một thông báo lỗi .

+1

này có ý nghĩa, nhưng bạn có biết những gì các phương pháp setExpirationTime là cho rồi? –

+0

Tôi tin rằng nó chỉ là một setter tài sản cho wrapper ObjectMetadata trong java SDK. Nó được gọi với kết quả của lệnh gọi putObject nội tại. Vì vậy, nó chỉ thiết lập các tài sản để bạn có thể nhìn vào nó trong các đối tượng cấp cao hơn. Đặt nó cho mình sẽ không làm gì cả. – GalacticJello

+1

Điều gì về tham số '--expires' trên AWS CLI? – CMCDragonkai

4

Dưới đây là một cách tiếp cận khác mà có thể làm việc cho một số trường hợp:

Bạn có thể thiết lập các vòng đời xô hết hạn đối tượng sau khi một số ngắn ngày (1, 7, bất cứ điều gì). Sau đó, trước khi mỗi đối tượng hết hạn, lập trình kéo dài thời gian hết hạn nếu bạn không muốn đối tượng đó hết hạn.

Bạn có thể đặt lại dấu thời gian trên đối tượng S3 bằng cách "sao chép" đối tượng đó với hướng dẫn để thay đổi lớp lưu trữ cho cùng một lớp hiện tại. Về cơ bản nó là "noop" hoạt động giống như lệnh "cảm ứng" của Linux/Unix.

tôi đã viết một bài viết mà đi qua lệnh dụ AWS-cli chứng minh làm thế nào để làm điều này: http://alestic.com/2013/09/s3-lifecycle-extend

+0

Giải pháp rất sáng tạo, nhưng, "phải có một cách tốt hơn". Hoặc, tôi đoán trong trường hợp này, AWS * nên * cung cấp một cách tốt hơn. – AJB

1

tôi mở rộng thời gian hết hạn bằng cách sao chép các đối tượng vào bản thân sử dụng lệnh s3cmd. Về cơ bản nó hoạt động như 'chạm'.

s3cmd cp s3: //bucket-name/file.txt s3: //bucket-name/file.txt

0

Một cách khác để hoàn thành nhiệm vụ này là để làm cho sử dụng thẻ đối tượng .

Đặt thẻ duy nhất cho từng đối tượng của đối tượng bạn muốn đặt thời gian tồn tại, Sau đó tạo quy tắc cấu hình vòng đời cho từng đối tượng và trong phần tử bộ lọc, bạn có thể sử dụng thẻ đối tượng cụ thể.

Thẻ này có thể là tên đối tượng, Ngoài ra, bạn có khả năng tạo quy tắc cho tập hợp con các đối tượng không có tiền tố chung.

Bạn có thể tìm thêm thông tin về cấu hình chu kỳ cuộc sống ở đây http://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html

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