red*_*boy 9 amazon-s3 amazon-web-services
我想知道如何延长密钥的有效期。 我指的不是访问对象的签名 URL,而是密钥本身。
我将 AWS 设置为存储桶中的所有对象应在 90 天后过期的规则。在大多数情况下,这就是我希望发生的事情。有时我需要将单个密钥的使用寿命最多再延长 90 天。事实上,重置倒计时就可以了。
我已经使用 AWS SDK 尝试过此操作,但没有成功。
我的第一次尝试是使用 copyObject 更改元数据:
ObjectMetadata meta = s3client.getObjectMetadata( bucket, key );
meta.setExpirationTime( getFutureDate( 90*DAYS ) );
CopyObjectRequest copyObjectRequest = new CopyObjectRequest( bucket, key, bucket, key );
copyObjectRequest.setNewObjectMetadata( meta );
copyObjectRequest.setStorageClass( StorageClass.Standard );
s3client.copyObject( copyObjectRequest );
上面的方法没有起作用。JavaDoc 甚至告诉我原因(尝试后阅读)。
void com.amazonaws.services.s3.model.ObjectMetadata.setExpirationTime(Date expirationTime)
For internal use only. This will *not* set the object's expiration time, and is only used to set the value in the object after receiving the value in a response from S3.
然后,我根据此链接尝试了上述内容的变体(添加了 setStorageClass): https://alestic.com/2013/09/s3-lifecycle-extend/
任何帮助表示赞赏。
您似乎正在尝试实现以下目标:
根据您引用的 alestic 博客文章,这可以通过将对象复制到其自身之上来完成。事实上,它似乎甚至不需要改变存储类别。
我将一个对象上传到存储桶,然后运行以下 Python 代码:
import boto
conn = boto.s3.connect_to_region('ap-southeast-2')
mybucket = conn.get_bucket('BUCKET-NAME')
mybucket.copy_key('OBJECT-NAME', 'BUCKET-NAME', 'OBJECT-NAME')
此代码将对象“复制到自身”,并且管理控制台显示新的上次修改日期。我没有测试生命周期规则,但我假设这是用于确定 90 天期限开始的日期。
我确实有正确的答案。下面的 Python 代码可能会执行相同的技巧,将 BUCKET/KEY 复制到自身上,并且还会重置过期时间。AWS S3 根据 24 小时时钟将到期时间四舍五入到同一时间,因此在同一天完成的任何复制都不会被注意到。我让密钥在 90 天的刷新中放置一周左右进行测试,看起来“上次修改”+ ExpirationRuleDays =“到期日期”确实成立。
我创建了两个密钥,运行以下代码后,我从 S3 管理控制台获得了以下信息。
老-1
Last Modified:  Thu Jun 04 15:48:58 GMT-700 2015
Expiry Date:    Wed Sep 02 17:00:00 GMT-700 2015
Expiration Rule:    Auto-Expire after 90 days
新 - 1
Last Modified:  Mon Jun 08 15:37:01 GMT-700 2015
Expiry Date:    Sun Sep 06 17:00:00 GMT-700 2015
Expiration Rule:    Auto-Expire after 90 days
老-2
Last Modified:  Thu Jun 04 13:34:36 GMT-700 2015
Expiry Date:    Wed Sep 02 17:00:00 GMT-700 2015
Expiration Rule:    Auto-Expire after 90 days
新 - 2
Last Modified:  Mon Jun 08 15:41:19 GMT-700 2015
Expiry Date:    Sun Sep 06 17:00:00 GMT-700 2015
Expiration Rule:    Auto-Expire after 90 days
public void refreshURLTTL( String messageId ) {
    AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider(configFileName, profileName));
    ObjectMetadata meta = s3client.getObjectMetadata(BUCKETNAME, KEY);
    ObjectMetadata newmeta = meta.clone();
    Date oldExpiration = meta.getExpirationTime();
    CopyObjectRequest copyObjectRequest = new CopyObjectRequest(BUCKETNAME, KEY, BUCKETNAME, KEY);
    copyObjectRequest.setNewObjectMetadata(newmeta);
    s3client.copyObject(copyObjectRequest);     
    ObjectMetadata finalmeta = s3client.getObjectMetadata(BUCKETNAME, KEY);
    Date currentExpiration = finalmeta.getExpirationTime();
    System.out.println("OLD: "+oldExpiration);
    System.out.println("NEW: "+currentExpiration);
}
| 归档时间: | 
 | 
| 查看次数: | 5548 次 | 
| 最近记录: |