У меня есть несколько сегментов 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
Но у некоторых ведро есть версии, и у меня есть ежедневные снимки некоторых файлов за последний год, которые я также хочу передавать.
Я понимаю, как я могу скопировать текущее содержимое корзины в новое, контролируемое другой организацией, после того, как они предоставят мне доступ, используя что-то вроде:
aws s3 sync s3://some-client-bucket s3://new-client-bucket --recursive
Однако я не думаю, что это будет перемещаться и между версиями, и я полагаюсь на управление версиями файлов в S3, а не на саму временную метку файлов.
Мне нужно создать какой-нибудь скрипт, чтобы:
Или в S3 есть отличная дополнительная функция, которая сделает это за меня автоматически?
Это старый вопрос, но я столкнулся с тем же требованием. Сегодня существует довольно простой способ скопировать все файлы из одной версии ведра в другую. Для этого я придумал следующий сценарий 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")