我已经在S3中配置了生命周期策略,S3中的一些对象存储在Glacier类中,一些对象仍然在S3中,现在我正在尝试从Glacier恢复对象,我可以使用控制台和s3cmd行中的初始化恢复来恢复Glacier中的对象。我如何通过Nodejs AWS SDK编写代码来恢复Glacier中的对象?
u59ebvdq1#
您可以使用AWS SDK for NodeJS中的S3.restoreObject()函数从Glacier恢复对象,如本文所述。
S3.restoreObject()
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); });
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时,它会发送一条消息通知这一点。
3条答案
按热度按时间u59ebvdq1#
您可以使用AWS SDK for NodeJS中的
S3.restoreObject()
函数从Glacier恢复对象,如本文所述。ttygqcqt2#
感谢Mark的更新。我已尝试使用s3.restoreObject(),代码正常工作。但我遇到以下问题:{ [MalformedXML:您提供的XML格式不正确或未根据发布的架构进行验证}
这是我试过的代码:
km0tfn4u3#
对我来说,它是通过使用AWS SDK v3工作:
我正在执行一个headObject查询,以了解文件是否已经被恢复。我认为这可能有助于避免重复请求(即使在恢复文件中调用RestoreObject时,它会发送一条消息通知这一点。