【AWS】s3 cpでローカルにコピーする方法と注意点【ダウンロード】
生徒
「AWS CLIのs3 cpってアップロードだけじゃなくて、S3からローカルにダウンロードもできるんですか?」
先生
「もちろんできます。s3 cpは双方向のコピーに対応しているので、S3からローカルへのコピーも簡単ですよ。」
生徒
「じゃあ、そのやり方と注意点を教えてください!」
先生
「では、基本的なダウンロード方法から、大量ファイルを扱う場合の注意点まで解説しますね。」
1. s3 cpでローカルにコピーする基本
aws s3 cpは、S3からローカルにファイルをコピーする際も使えます。書き方はアップロード時と同じですが、順番を「S3 → ローカル」にします。
aws s3 cp s3://my-bucket/sample.txt ./sample.txt
このコマンドでは、S3バケットmy-bucket内のsample.txtをカレントディレクトリにダウンロードします。
2. ディレクトリごとダウンロードする方法
フォルダ(プレフィックス)ごとコピーするには--recursiveオプションを使います。これにより、指定フォルダ配下の全ファイルがローカルにコピーされます。
aws s3 cp s3://my-bucket/data/ ./data/ --recursive
フォルダ構造は保持されるため、大量のファイルをバックアップするときに便利です。
3. ファイル名やパスに注意するポイント
S3内のファイルキーは「フォルダ/ファイル名」の形式になっているため、指定を間違えるとコピーされなかったりエラーになります。例えばdata/file.txtをコピーする場合は、パス全体を指定する必要があります。
aws s3 cp s3://my-bucket/data/file.txt ./file.txt
4. 上書きとスキップの挙動
デフォルトではローカルに同名ファイルがある場合、S3の内容で上書きされます。更新がない場合も上書きするため、不要な上書きを避けたい場合は--exact-timestampsオプションを使いましょう。
aws s3 cp s3://my-bucket/sample.txt ./sample.txt --exact-timestamps
これにより、タイムスタンプとサイズが一致する場合はコピーをスキップします。
5. 特定のファイルだけダウンロードする方法
特定の拡張子だけをダウンロードしたい場合は--excludeと--includeを組み合わせます。
aws s3 cp s3://my-bucket/data/ ./data/ --recursive --exclude "*" --include "*.jpg"
これでJPEG画像だけをローカルにコピーできます。
6. 大量ファイルをコピーする際の注意点
- ネットワーク速度に依存するため、大容量データは時間がかかる
- 中断した場合は再実行で続きをコピー可能(ただし差分判定はタイムスタンプとサイズのみ)
- 必要に応じてAWS CLIのプロファイルを指定し、正しいアカウントのバケットから取得する
7. 安全にダウンロードするための工夫
重要なデータを扱う場合は、まず--dryrunオプションでコピー対象を確認しましょう。
aws s3 cp s3://my-bucket/data/ ./data/ --recursive --dryrun
これにより、実際にコピーする前にファイル一覧をチェックでき、誤ダウンロードを防げます。