AWSでS3のファイルを別のバケットにコピーするスクリプトを見つけたけれど、2015/4時点では少し変更する必要があった。
kntmrkm/bucket2bucket
スクリプトの実行は以下のように行う。
ruby bucket2bucket.rb -i [アクセスキー] -k [シークレットキー] -s [コピー元のバケット名] -d [コピー先のバケット名] -v
アクセスキー、シークレットキーはコピー先のアカウントのものを使用する。
コピー元が異なるアカウントの場合
バケットのプロパティから、アクセス許可の設定に「バケットポリシーの追加」という項目があるので、そこにポリシーを追加する。
ポリシー例
{
"Id": "Policy*************",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt*************",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket1/*",
※ バケット名をコピー元のものに変更
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:root"
※ アカウントのIDをコピー先のものに変更
]
}
}
]
}
オリジナルのスクリプトと異なるところ
- AWS-SDKのバージョン違いがあったのでAWS-SDK-V1を使用するように修正
- ACLのコピーを行うコードの変更 ※ コピー後はpublic_readになるようになってます
- ここらへんの権限コピーは試してません(色々エラーが出てたのでpublic_readを直接指定しているだけ)