根据需要向Dlacier提供S3存储桶是否有可能来自boto3 API?

时间:2017-01-24 16:37:52

标签: python amazon-s3 amazon-glacier

我正在测试脚本以恢复存储在S3存储桶中的日期,其中包含每天将数据移动到冰川的生命周期规则。因此,从理论上讲,当我将文件上传到S3存储桶时,一天之后,亚马逊基础设施应将其移至冰川。

但我想测试一个我在python中开发的脚本来测试 恢复过程。所以,如果我理解boto3 API,我还没有看到任何强制存储在S3存储桶中的文件立即移动的方法 到冰川储存。有可能做到这一点或它是必要的 等到亚马逊基础设施启动生命周期规则。

我想使用这样的代码:

[hidden]

但是我找不到任何能够按需迁移到冰川的API。另外,我没有 知道我是否可以使用存储桶生命周期规则强制执行此操作

2 个答案:

答案 0 :(得分:4)

<强>更新

S3已更改PUT Object API,有效2018-11-26。这在以前是不可能的,但您现在可以直接将对象写入S3 Glacier存储类。

  

我们从客户那里听到的关于使用S3 Glacier的一件事是,他们更喜欢使用最常见的S3 API直接在S3 Glacier对象上运行。今天我们宣布S3 PUT到Glacier的可用性,它允许您使用标准的S3“PUT”API并选择任何存储类,包括S3 Glacier,来存储数据。数据可以直接存储在S3 Glacier中,无需上传到S3 Standard,并立即转换到具有零日生命周期策略的S3 Glacier。

     

https://aws.amazon.com/blogs/architecture/amazon-s3-amazon-s3-glacier-launch-announcements-for-archival-workloads/

该服务现在接受x-amz-storage-class的以下值:

STANDARD
STANDARD_IA
ONEZONE_IA
INTELLIGENT_TIERING
GLACIER
REDUCED_REDUNDANCY
对于更改元数据或重命名对象的操作,

PUT+Copy(始终使用,通常后跟DELETE)也支持新功能。

请注意,无论您的SDK在本地“屏蔽”这些值的任何程度,利用此功能可能需要您升级到更新版本的SDK。

这是不可能的。将S3对象迁移到GLACIER存储类的唯一方法是通过生命周期策略。

  

x-amz-storage-class

     

约束:您不能将GLACIER指定为存储类。要将对象转换为GLACIER存储类,可以使用生命周期配置。

     

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html

REST API是所有SDK,控制台和aws-cli使用的接口。

注意...使用小对象进行测试,但不要将小对象存档到生产中的Glacier。即使您在90天之前删除了对象,S3也会向您收取最少90天的冰川存储费用。 (记录此费用。)

答案 1 :(得分:0)

可以使用upload_archive()的{​​{1}}方法将文件从S3上传到Glacier。

更新:这与S3对象生命周期管理不同,但直接上传到Glacier。

Glacier

glacier_client = boto3.client('glacier') bucket = s3.Bucket(TARGET_BUCKET) for obj in bucket.objects.filter(Prefix=TARGET_KEYS + KEY_SEPARATOR): archive_id = glacier_client.upload_archive(vaultName='TARGET_VAULT',body=obj.get()['Body'].read()) print obj.key, archive_id 不接受.filter()关键字参数。