如何使用nodejs代码将对象从amazon glacier恢复到s3?

ycggw6v2  于 2023-03-17  发布在  Node.js
关注(0)|答案(3)|浏览(153)

我已经在S3中配置了生命周期策略,S3中的一些对象存储在Glacier类中,一些对象仍然在S3中,现在我正在尝试从Glacier恢复对象,我可以使用控制台和s3cmd行中的初始化恢复来恢复Glacier中的对象。我如何通过Nodejs AWS SDK编写代码来恢复Glacier中的对象?

u59ebvdq

u59ebvdq1#

您可以使用AWS SDK for NodeJS中的S3.restoreObject()函数从Glacier恢复对象,如本文所述。

ttygqcqt

ttygqcqt2#

感谢Mark的更新。我已尝试使用s3.restoreObject(),代码正常工作。但我遇到以下问题:{ [MalformedXML:您提供的XML格式不正确或未根据发布的架构进行验证}
这是我试过的代码:

var AWS = require('aws-sdk');
var s3 = new AWS.S3({accessKeyId: 'XXXXXXXX', secretAccessKey:'XXXXXXXXXX'});
var params = { 
Bucket: 'BUCKET',
Key: 'file.json',
RestoreRequest: 
{ Days: 1, 
 GlacierJobParameters: { Tier: 'Standard'  } 
} 
}; 
s3.restoreObject (params, function(err, data) 
{ 
if (err) console.log(err, err.stack); 
else console.log(data);  
});
km0tfn4u

km0tfn4u3#

对我来说,它是通过使用AWS SDK v3工作:

const s3Client = new S3Client({ region: REGION });
    const paramsToConsult = {
        Bucket: S3_BUCKET_NAME,
        Key: S3_FILENAME,
    };
    const consult = await s3Client.send( new HeadObjectCommand(paramsToConsult) );
    if (consult.Restore === 'ongoing-request="true"'){
        return consult;
    }
    const paramsToRestore = {
        Bucket: S3_BUCKET_NAME,
        Key: S3_FILENAME,
        RestoreRequest: {
            Days: DAYS_TO_RESTORE,
            GlacierJobParameters: { Tier: RETRIEVAL_TYPE }, // RETRIEVAL_TYPE = 'Bulk'
        },
    };
    const restore = await s3Client.send( new RestoreObjectCommand(paramsToRestore) );
    s3Client.destroy();

我正在执行一个headObject查询,以了解文件是否已经被恢复。我认为这可能有助于避免重复请求(即使在恢复文件中调用RestoreObject时,它会发送一条消息通知这一点。

相关问题