按需将 S3 存储到 Glacier 是否可以从 boto3 API?

S3 buckets to Glacier on demand Is it possible from boto3 API?

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

但我想测试我在 python 中开发的脚本来测试 还原过程。所以,如果我了解 boto3 API,我还没有看到任何方法强制立即移动存储在 S3 存储桶中的文件 到冰川存储。有可能这样做还是有必要 等到 Amazon 基础设施触发生命周期规则。

我想使用这样的代码:

bucket = s3.Bucket(TARGET_BUCKET)
for obj in bucket.objects.filter(Bucket=TARGET_BUCKET, Prefix=TARGET_KEYS + KEY_SEPARATOR):
    obj.move_to_glacier()

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

可以使用 Glacierupload_archive() 方法将文件从 S3 上传到 Glacier。

更新: 这与 S3 对象生命周期管理不同,而是直接上传到 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() 不接受 Bucket 关键字参数。

更新:

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

One of the things we hear from customers about using S3 Glacier is that they prefer to use the most common S3 APIs to operate directly on S3 Glacier objects. Today we’re announcing the availability of S3 PUT to Glacier, which enables you to use the standard S3 “PUT” API and select any storage class, including S3 Glacier, to store the data. Data can be stored directly in S3 Glacier, eliminating the need to upload to S3 Standard and immediately transition to S3 Glacier with a zero-day lifecycle policy.

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 "screens" 这些值在本地的范围如何,利用此功能可能需要您升级到更新版本的 SDK。


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

x-amz-storage-class

Constraints: You cannot specify GLACIER as the storage class. To transition objects to the GLACIER storage class, you can use lifecycle configuration.

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

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


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