我已经成功地使用copyObject将文件从S3标准移动到S3冰川。现在,我正在尝试使用restoreObject将文件从S3冰川移回S3标准。
我已经根据我在restoreObject中找到的内容创建了params变量,以传递给restoreObject文档,但是当我试图调用restore时,我得到:
您提供的XML格式不是很好,也没有针对我们发布的模式进行验证。
下面是我使用的定义:
const glacierRestore = {
Bucket: process.env.AWS_BUCKET,
Key: 'file name goes here',
RestoreRequest: {
OutputLocation: {
S3: {
BucketName: process.env.AWS_BUCKET,
Prefix: 'X',
StorageClass: 'STANDARD'
}
},
Tier: 'Standard'
}
};我遗漏了什么?我想我有我想要做的事情所需要的所有领域。是否有一个地方我可以验证我的xml对照,这将给我更多的反馈,而只是它是无效的?
我意识到这是JSON,但它必须将其转换为XML。
发布于 2020-06-10 21:40:16
我终于找到了一种方法来做我想做的事情,并且认为我至少会把它记录下来,这样如果其他人试图做类似的事情,他们可能会在我的解决方案中找到一些帮助。
首先,我不能在RestoreRequest中使用RestoreRequest进行恢复,除非我做了一个选择,但是我想要做一个文件恢复,所以我不得不以不同的方式进行。
我使用s3.head determine ()从文件中获取信息,以便确定它的状态。当文件位于标准存储类中时,我会得到如下内容:
{
AcceptRanges: 'bytes',
LastModified: 2020-06-03T20:53:28.000Z,
ContentLength: 147451,
ETag: '"20573fb94e8c715dee562ce04b795708"',
ContentType: 'application/octet-stream',
Metadata: {}
}一旦我把它移到冰川存储类,我就会得到这样的信息:
{
AcceptRanges: 'bytes',
LastModified: 2020-06-03T20:56:11.000Z,
ContentLength: 147451,
ETag: '"20573fb94e8c715dee562ce04b795708"',
ContentType: 'application/octet-stream',
Metadata: {},
StorageClass: 'GLACIER'
}现在,返回的信息中添加了一个StorageClass。现在来了有趣的部分。我使用s3.restoreObject()从Glacier获取文件,但这只创建一个临时副本(默认为1天),该临时副本在该期间之后被删除,但将该副本保存在Glacier中。我希望在Standard中有一个副本,并在Glacier中删除该副本,我必须设法找出文件何时被恢复,这样我就可以将它们复制到Standard中,并从Glacier中删除它们。
问题是,在默认情况下,Glacier需要花费3-5个小时才能将文件复制到Standard,所以我不得不创建一个进程来完成这个任务。我有一个进程,每5分钟检查一次,看看是否有任何文件已经暂时恢复,以便我可以复制和删除冰川副本。当文件正在从Glacier检索并临时复制时,文件的s3.head copied返回如下所示:
{
AcceptRanges: 'bytes',
Restore: 'ongoing-request="true"',
LastModified: 2020-06-03T20:56:11.000Z,
ContentLength: 147451,
ETag: '"20573fb94e8c715dee562ce04b795708"',
ContentType: 'application/octet-stream',
Metadata: {},
StorageClass: 'GLACIER'
}现在,该文件有一个Restore标记,它表示正在进行的-request= "true“,它让我知道该文件正在从Glacier恢复。从Glacier (临时)恢复文件后,s3. s3.headObject返回的内容如下:
{
AcceptRanges: 'bytes',
Restore: 'ongoing-request="false", expiry-date="Sun, 07 Jun 2020 00:00:00 GMT"',
LastModified: 2020-06-03T20:56:11.000Z,
ContentLength: 147451,
ETag: '"20573fb94e8c715dee562ce04b795708"',
ContentType: 'application/octet-stream',
Metadata: {},
StorageClass: 'GLACIER'
}现在恢复显示正在进行的-request= "false“,因此我知道恢复已经完成,我可以将文件复制到Standard中,并从Glacier中删除该文件。
https://stackoverflow.com/questions/62066869
复制相似问题