既存のホスティングクライアントを他の組織に引き継いでいるため、別の組織にアクセスを引き渡したい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")