You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用S3 restore_object转归档对象到STANDARD遇MalformedXML错误求助

解决AWS S3归档类对象转STANDARD存储类的问题

问题分析

你用restore_object带OutputLocation参数报错,是因为这个参数的作用是将恢复的归档对象导出到指定的S3位置,并非修改原对象的存储类。你的参数里把Prefix设为完整的对象key,不符合API的XML schema要求,所以触发MalformedXML错误。

另外,仅用days参数的临时恢复不会永久改变存储类,这确实不是你要的效果。

正确实现步骤

要永久将GLACIER/DEEP_ARCHIVE对象转为STANDARD,需要分两步:

  1. 提交恢复请求,等待归档对象变为可访问状态
  2. 将恢复后的对象复制到同一个key,通过copy操作修改存储类(S3允许同桶同key复制,会覆盖原对象并更新存储类)

代码示例

import boto3
import time

# 初始化S3客户端
session = boto3.Session(...)  # 填入你的凭证/配置
s3_client = session.client('s3')

bucket_name = 'my-bucket-name'
object_key = 'file.txt'

# 提交恢复请求
def restore_archived_object(bucket, key):
    try:
        s3_client.restore_object(
            Bucket=bucket,
            Key=key,
            RestoreRequest={
                'Days': 7,  # 临时保留恢复状态的天数,按需设置
                'GlacierJobParameters': {
                    'Tier': 'Expedited'  # 恢复优先级,可选Expedited/Standard/Bulk
                }
            }
        )
        print(f"恢复请求已提交,等待对象变为可用状态...")
    except Exception as e:
        if 'ObjectRestoreInProgress' in str(e):
            print(f"对象已在恢复中")
        else:
            raise e

# 检查对象是否恢复完成
def is_object_restored(bucket, key):
    obj = s3_client.head_object(Bucket=bucket, Key=key)
    return 'Restore' in obj and obj['Restore'] == 'ongoing-request="false"'

# 执行恢复并等待完成
restore_archived_object(bucket_name, object_key)
while not is_object_restored(bucket_name, object_key):
    time.sleep(60)  # 每分钟检查一次,根据恢复层级调整等待时间
print("对象已恢复完成")

# 复制对象到同一个key,修改存储类为STANDARD
s3_client.copy_object(
    Bucket=bucket_name,
    Key=object_key,
    CopySource={'Bucket': bucket_name, 'Key': object_key},
    StorageClass='STANDARD',
    MetadataDirective='COPY'  # 复制原对象的元数据
)

print(f"对象{object_key}已成功转为STANDARD存储类")

关键说明

  • 恢复层级:Expedited最快(1-5分钟)但费用最高,Standard3-5小时,Bulk5-12小时,根据你的需求选择
  • 复制操作:同key复制会自动替换原对象,同时将存储类更新为STANDARD,这是永久修改
  • 恢复状态检查:通过head_object的Restore字段判断是否恢复完成,ongoing-request="false"表示恢复完成

内容的提问来源于stack exchange,提问作者Sotosoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:32:48