更新AWS S3到期时间

时间:2015-05-19 16:59:11

标签: amazon-web-services amazon-s3

我想知道如何延长密钥的到期时间。我不是指访问该对象的签名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/

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您似乎正在努力实现以下目标:

  • 使用生命周期规则定义一个存储桶,该存储桶将在90天后永久删除对象
  • 将对象上传到存储桶
  • 对于某些指定的对象,请重新启动90天超时

根据您引用的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天期限开始的日期。

答案 1 :(得分:1)

我确实有正确的答案。下面的Python代码可能会将BUCKET / KEY复制到自身上,并且还会重置过期。 AWS S3基于24小时时钟将到期时间四舍五入到同一时间,因此在同一天完成的任何复制都不会被注意到。我让密钥在90天刷新一周左右进行测试,看起来好像是“上次修改”+ ExpirationRuleDays =“到期日”。

我创建了两个密钥,在运行以下代码后,我从S3 Management Console获得了以下格式。

OLD - 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

OLD - 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

CODE:

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);
}