【发布时间】:2021-12-07 18:18:45
【问题描述】:
我在 S3 存储桶中有一个文件,并且版本控制已打开。使用 aws-cli 是否可以复制此文件的特定版本,而不是最新版本?
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-cli
我在 S3 存储桶中有一个文件,并且版本控制已打开。使用 aws-cli 是否可以复制此文件的特定版本,而不是最新版本?
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-cli
是的,您可以这样做,请参阅此示例,您将需要对象的版本 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
【讨论】:
是的,使用aws s3api get-object 并指定--version-id
更多信息在这里http://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html
【讨论】:
有一个非常方便的工具,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}`);
}
}
【讨论】: