AWS CLIのインストールと認証設定は「AWS CLI 導入入門:インストールから認証・プロファイル設定まで」を参照してください。
S3の基本操作
バケット一覧を表示する
aws s3 ls
2024-01-15 12:00:00 my-app-bucket 2024-02-20 09:30:00 my-logs-bucket 2024-03-10 15:45:00 my-backup-bucket
バケット内のオブジェクト一覧を表示する
aws s3 ls s3://my-app-bucket
PRE images/
PRE uploads/
2024-05-01 10:00:00 1024 index.html
2024-05-01 10:00:00 45678 style.css
フォルダの中を見る
aws s3 ls s3://my-app-bucket/images/
再帰的にすべてのオブジェクトを表示する
aws s3 ls s3://my-app-bucket --recursive
ファイル数・サイズの合計を確認する
aws s3 ls s3://my-app-bucket --recursive --human-readable --summarize
... Total Objects: 142 Total Size: 1.2 GiB
ファイルをアップロードする(cp)
ローカルファイルをS3へアップロード
aws s3 cp ./index.html s3://my-app-bucket/
S3上のパスを指定してアップロード
aws s3 cp ./image.png s3://my-app-bucket/images/2024/image.png
フォルダごとアップロードする(--recursive)
aws s3 cp ./dist/ s3://my-app-bucket/ --recursive
特定ファイルを除外する
aws s3 cp ./dist/ s3://my-app-bucket/ --recursive --exclude "*.DS_Store"
特定ファイルだけアップロードする
# .htmlファイルだけ aws s3 cp ./dist/ s3://my-app-bucket/ --recursive --exclude "*" --include "*.html"
ファイルをダウンロードする(cp)
S3からローカルへダウンロード
aws s3 cp s3://my-app-bucket/index.html ./
フォルダごとダウンロードする
aws s3 cp s3://my-app-bucket/ ./local-backup/ --recursive
ファイルを移動する(mv)
S3上でファイルを移動・リネーム
aws s3 mv s3://my-app-bucket/old-name.txt s3://my-app-bucket/new-name.txt
バケット間でファイルを移動する
aws s3 mv s3://source-bucket/file.txt s3://dest-bucket/file.txt
フォルダごと移動する
aws s3 mv s3://my-app-bucket/old-folder/ s3://my-app-bucket/new-folder/ --recursive
ファイルを削除する(rm)
1ファイル削除
aws s3 rm s3://my-app-bucket/index.html
フォルダ以下を全削除
aws s3 rm s3://my-app-bucket/old-folder/ --recursive
特定の拡張子だけ削除
aws s3 rm s3://my-app-bucket/ --recursive --exclude "*" --include "*.tmp"
フォルダを同期する(sync)
sync はローカルとS3を差分で同期します。変更・追加されたファイルだけ転送するため cp --recursive より効率的です。
ローカル → S3(デプロイ)
aws s3 sync ./dist/ s3://my-app-bucket/
S3 → ローカル(バックアップ取得)
aws s3 sync s3://my-app-bucket/ ./local-backup/
S3 → S3(バケット間コピー)
aws s3 sync s3://source-bucket/ s3://dest-bucket/
S3にないローカルファイルを削除する(--delete)
# ローカルで削除したファイルをS3からも削除する aws s3 sync ./dist/ s3://my-app-bucket/ --delete
実行前に確認する(--dryrun)
--dryrun をつけると実際には実行せず、何が行われるかだけ表示されます。削除や同期の前に確認するのに使えます。
aws s3 sync ./dist/ s3://my-app-bucket/ --delete --dryrun
(dryrun) upload: dist/index.html to s3://my-app-bucket/index.html (dryrun) delete: s3://my-app-bucket/old-page.html
プロファイルで複数アカウントを切り替える
プロファイルの設定方法は「AWS CLI 導入入門:インストールから認証・プロファイル設定まで」を参照してください。
# プロファイルを指定してS3コマンドを実行する aws s3 ls --profile dev aws s3 cp ./file.txt s3://work-bucket/ --profile work aws s3 sync ./dist/ s3://work-bucket/ --profile prod
リージョンを指定する
aws s3 ls s3://us-bucket/ --region us-east-1
Presigned URLを発行する
Presigned URLを使うと、AWSアカウントを持たない人でも一時的にS3のファイルにアクセスできます。
# 1時間だけ有効なダウンロードURLを発行 aws s3 presign s3://my-app-bucket/report.pdf --expires-in 3600
https://my-app-bucket.s3.ap-northeast-1.amazonaws.com/report.pdf?X-Amz-Algorithm=...
デフォルトの有効期限は1時間(3600秒)です。最大7日間(604800秒)まで設定できます。
よく使うオプション早見表
| オプション | 説明 |
|---|---|
--recursive |
フォルダ以下を再帰的に処理する |
--exclude "pattern" |
パターンに一致するファイルを除外 |
--include "pattern" |
パターンに一致するファイルだけ処理 |
--delete |
sync時に転送元にないファイルを削除 |
--dryrun |
実行せずに何が行われるか確認 |
--profile name |
使用するプロファイルを指定 |
--region name |
リージョンを指定 |
--human-readable |
ファイルサイズを人が読みやすい形式で表示 |
--summarize |
ls時に合計件数・サイズを表示 |
まとめ
# バケット一覧 aws s3 ls # オブジェクト一覧 aws s3 ls s3://my-bucket/ --recursive --human-readable --summarize # アップロード aws s3 cp ./dist/ s3://my-bucket/ --recursive # ダウンロード aws s3 cp s3://my-bucket/file.txt ./ # 同期(差分のみ転送) aws s3 sync ./dist/ s3://my-bucket/ --delete # 削除 aws s3 rm s3://my-bucket/old-file.txt # 実行前確認 aws s3 sync ./dist/ s3://my-bucket/ --delete --dryrun # Presigned URL発行 aws s3 presign s3://my-bucket/file.pdf --expires-in 3600