2012-08-29 85 views
16

我知道如何使用給定某個前綴的對象過期規則來過期S3存儲桶中的對象,但是對於我的目的,我希望以每個對象爲基礎以編程方式設置過期日期。s3 per object expiry

Java SDK似乎表明這是可能的,因爲它有一個setExpirationTime方法,但是無論何時使用此方法設置到期日期,似乎都不會發生任何事情,並且該對象永不過期。此外,通過aws控制檯查看對象屬性,不會設置過期時間。

是否每個文件到期不受支持? /是否有任何額外的步驟需要我去做才能使其運作? /如果不支持每個文件過期,是否可以將與過期前綴匹配的文件排除在過期之外?

在此先感謝!

回答

8

它看起來不像每個配置支持object expiration,而是每個配置最多100個規則的每個存儲桶生命週期配置,如您所發現的。

存儲桶有一個生命週期配置。生命週期配置 最多可以有100條規則。

生命週期值必須是非零的正整數。 Amazon S3 通過將規則中指定的 的到期時間添加到對象創建時間並將得到的 時間舍入到UTC的第二天午夜時間來計算到期時間。

如果每個文件過期是不支持,是可以排除 文件匹配被終止到期的前綴?

它看起來不像可以重疊規則。

請注意確保規則不重疊。例如,下列生命週期配置中的 具有一個規則,該規則將前綴「文檔」設置爲 的對象在30天后過期。配置還有 還有另一個規則,即在365天后過期的前綴爲「documents/2011」的對象設置爲 。在這種情況下,Amazon S3返回錯誤消息 。

+1

這是有道理的生命週期配置的詳細信息,但你知道setExpirationTime方法是什麼呢? –

+0

我相信它只是java SDK中ObjectMetadata包裝器的屬性設置器。它被調用了inernal putObject invoke調用的結果。所以它只是設置屬性,以便您可以在更高級別的對象中查看它。自己設置將無能爲力。 – GalacticJello

+1

AWS CLI上的'--expires'參數如何? – CMCDragonkai

4

下面是可能對某些情況下工作的另一種方法:

您可以設置桶生命週期天的短號碼後過期對象(1,7,等等)。然後,在每個對象到期之前,如果您不希望該對象過期,則以編程方式延長其到期時間。

您可以通過將對象「複製」到自己的方式來重置S3對象的時間戳,並使用指令將存儲類更改爲當前所在的同一類。它基本上是一個「noop」,就像Linux/Unix「touch」命令一樣。

我寫通過例如AWS-CLI命令演示如何做到這一點的行走文章:http://alestic.com/2013/09/s3-lifecycle-extend

+0

非常有創意的解決方案,但是,「應該有更好的方法」。或者,我想在這種情況下,AWS *應該提供更好的方法。 – AJB

1

我通過使用s3cmd命令複製對象入本身延長所述過期時間。它基本上像'touch'一樣工作。

s3cmd CP S3://bucket-name/file.txt S3://bucket-name/file.txt

0

來完成這項任務的另一種方法是使用對象標籤。

設置要設定爲壽命,然後創建爲每個對象的生命週期配置規則的對象,每一個對象,並可以使用對象特定的標籤,過濾元件的唯一標籤。

這個標籤可以是對象的名字,你也需要做一個規則的物體的一個子集,沒有共同的前綴的能力。

您可以在這裏進一步瞭解 http://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html