Amazon S3 のファイルをまるっと別のバケットにコピーする

Shunsuke Sawada

画像関係でいろいろテストしたいって場合に便利。
AWS CLIでオーケー。

状況
画像はAmazon S3に保存してある。
本番環境の画像でやるわけにはいかないから、テスト環境を本番環境に近づけたい。

AWS CLIをインストール

IAM

まずはIAMにいって、1人ユーザーをつくる。
Security Credentialsがもらえるので、ダウンロード。

Attach Policy でS3に関する権限を与えておく。

AWS CLIをインストール

Pythonあるかな。なかったらインストールしてください。

1
$ python --version

ダウンロード

1
$ curl -O https://bootstrap.pypa.io/get-pip.py

実行

1
$ sudo python get-pip.py

インストール

1
$ sudo pip install awscli

AWS CLIの設定

1
2
3
4
5
6
$ aws configure

AWS Access Key ID [None]: xxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

ここでIAMで取得した情報を入力すれば完了。
Tokyo リージョンはap-northeast-1です。

  
複数アカウントを使いたい場合

1
2
3
4
5
6
aws configure --profile YOURNAME
=>
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:

すきな名前を付けて、上と同じことをする。
実行の際には
aws --profile PROFILE_NAME s3 sync のようにオプションで名前を渡してあげればOK。

コピーする

実際にコピーするのはコレでOK。
syncなんてあるんだ。便利ですね。

1
$ aws s3 sync s3://bucket-name/uploads s3://bucket-name-dev/uploads

bucket-name から bucket-name-dev にコピーしています。
すでにあるファイルは無視されるようなので、
最新の状態にしたい場合は、いつもこのコマンドで良いようです。

参考

Installing the AWS Command Line Interface - AWS Command Line Interface
Configuring the AWS Command Line Interface - AWS Command Line Interface
amazon s3 - AWS S3 copy files and folders between two buckets - Stack Overflow

2
Shunsuke Sawada

おすすめの記事

acts-as-taggable-on タグを表示させる順番を決めたい
Railsを4.2にバージョンアップしたら、Vagrantのローカル開発環境にアクセスできなくなった問題
Railsのバリデーションエラー後にレイアウトが崩れるとき