我正在测试脚本以恢复存储在S3存储桶中的日期,其中包含每天将数据移动到冰川的生命周期规则。因此,从理论上讲,当我将文件上传到S3存储桶时,一天之后,亚马逊基础设施应将其移至冰川。
但我想测试一个我在python中开发的脚本来测试 恢复过程。所以,如果我理解boto3 API,我还没有看到任何强制存储在S3存储桶中的文件立即移动的方法 到冰川储存。有可能做到这一点或它是必要的 等到亚马逊基础设施启动生命周期规则。
我想使用这样的代码:
[hidden]
但是我找不到任何能够按需迁移到冰川的API。另外,我没有 知道我是否可以使用存储桶生命周期规则强制执行此操作
答案 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。
该服务现在接受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()
关键字参数。