首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用S3将文件从S3冰川移动到S3标准有效xml

用S3将文件从S3冰川移动到S3标准有效xml
EN

Stack Overflow用户
提问于 2020-05-28 14:12:24
回答 1查看 167关注 0票数 0

我已经成功地使用copyObject将文件从S3标准移动到S3冰川。现在,我正在尝试使用restoreObject将文件从S3冰川移回S3标准。

我已经根据我在restoreObject中找到的内容创建了params变量,以传递给restoreObject文档,但是当我试图调用restore时,我得到:

您提供的XML格式不是很好,也没有针对我们发布的模式进行验证。

下面是我使用的定义:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-10 21:40:16

我终于找到了一种方法来做我想做的事情,并且认为我至少会把它记录下来,这样如果其他人试图做类似的事情,他们可能会在我的解决方案中找到一些帮助。

首先,我不能在RestoreRequest中使用RestoreRequest进行恢复,除非我做了一个选择,但是我想要做一个文件恢复,所以我不得不以不同的方式进行。

我使用s3.head determine ()从文件中获取信息,以便确定它的状态。当文件位于标准存储类中时,我会得到如下内容:

代码语言:javascript
复制
{
  AcceptRanges: 'bytes',
  LastModified: 2020-06-03T20:53:28.000Z,
  ContentLength: 147451,
  ETag: '"20573fb94e8c715dee562ce04b795708"',
  ContentType: 'application/octet-stream',
  Metadata: {}
}

一旦我把它移到冰川存储类,我就会得到这样的信息:

代码语言:javascript
复制
{
  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返回如下所示:

代码语言:javascript
复制
{
  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返回的内容如下:

代码语言:javascript
复制
{
  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中删除该文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62066869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档