Chr*_*ams 7 backup amazon-s3 amazon-web-services
我有几个 S3 存储桶,我想将访问权移交给另一个组织,就像将现有的托管客户端移交给他们一样。
查看文档后,如果我不想再负责存储桶,似乎最简单的选择是将新存储桶的内容复制到由新组织控制的新存储桶,并使任何现有应用程序写入文件从现在开始到新存储桶。
桶不是很大:
aws s3 ls --human-readable --recursive --summarize s3://some-client-bucket
# (snip… lots of files listed, all less than 10mb)
# Total Objects: 22764
# Total Size: 2.4 GiB
Run Code Online (Sandbox Code Playgroud)
但是有些存储桶是版本化的,我有一些文件的每日快照,可以追溯到去年,我也希望能够传输这些文件。
我了解在他们使用以下内容授予我访问权限后,如何将存储桶的当前内容复制到由另一个组织控制的新存储桶:
aws s3 sync s3://some-client-bucket s3://new-client-bucket --recursive
Run Code Online (Sandbox Code Playgroud)
但是,我认为这也不会跨版本移动,而且我一直依赖 S3 的每个文件版本控制,而不是自己为文件添加时间戳。
我是否必须对一些脚本进行 jerry-rig 以:
或者 S3 中是否有一些漂亮的额外功能可以为我自动执行此操作?
小智 4
这是一个老问题,但我碰巧遇到了同样的要求。如今,有一种相当简单的方法可以将所有文件从一个版本存储桶复制到另一个版本存储桶。我想出了以下 PowerShell 脚本来执行此操作:
$sourceBucket = <source bucket>
$destinationBucket = <destination bucket>
$nextKeyMarker = $null
$nextVersionIdMarker = $null
do {
$objectVersions = Get-S3Version -BucketName $sourceBucket `
-KeyMarker $nextKeyMarker `
-VersionIdMarker $nextVersionIdMarker
$nextKeyMarker = $objectVersions.NextKeyMarker
$nextVersionIdMarker = $objectVersions.NextVersionIdMarker
$objectVersions.Versions | foreach {
Copy-S3Object -BucketName $sourceBucket `
-DestinationBucket $destinationBucket `
-Key $_.Key `
-DestinationKey $_.Key `
-VersionId $_.VersionId `
-CannedACLName bucket-owner-full-control
}
} while ($objectVersions.IsTruncated -eq "True")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2945 次 |
最近记录: |