从 S3 存储桶中获取特定版本的文件

Getting specific version of file from S3 bucket

我在启用了版本控制的 S3 存储桶中有一个文件。使用 aws-cli 是否可以复制此文件的特定版本,而不是最新版本?

是,使用aws s3api get-object并指定--version-id

这里有更多信息http://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html

是的,您可以看到这个例子,您将需要对象的版本 ID。

aws s3api get-object --bucket mybucket --key file1.txt --version-id Mj1.PcWG8e.C._7LhvFU131pXJ98abIl foo.txt

您还可以使用此命令列出版本以获取版本 ID。

aws s3api list-object-versions --bucket mybucket

有一个非常方便的工具 s3-pit-restore,它允许从版本化存储桶中恢复文件或前缀(目录)的时间点版本。参见Angelo对这个问题的回复:

https://serverfault.com/questions/589713/restore-a-versioned-s3-bucket-to-a-particular-point-in-time

这就是我在 s3 中为特定 versionId 获取对象的方式:

  async function getObject() {
    try {
      const params = {
        Bucket: this.imageBucket,
        Key: `YOUR_PATH_TO_OBJECT?versionId=u_HtqVAVylAG2fk0tXOGoC6CdT4EtOV2`,
      };
      const data = await s3.getObject(params).promise();
      return data.Body.toString('utf-8');
    } catch (e) {
      throw new Error(`Could not retrieve file from S3: ${e.message}`);
    }
  }