AWS CLI S3 チートシート
AWS CLI S3 チートシート:
AWS CLI S3コマンドのチートシートです。
基本的なコマンドの使い方に加えて
以下のAWS公式ドキュメントの内容をベースにしています。
大きく3つのセクションに分けて記載しています。文量がかなり多くなってしまったので適宜ページ内検索などでジャンプ頂くのが良さそうです。
このセクションではオブジェクトのリスト操作に絞って記載します。
S3 URIを指定するとオブジェクトとプレフィックスをリストできます。
プレフィックスは
プレフィックスはサイズが
前述の
上記の応用で
オプション無しで実行すると、有効期限1時間(3,600秒)の署名付きURLを発行できます。
レスポンスのURLの
https://www.epochconverter.com/
以下の例では7日間(604,800秒)を指定しています。
署名付きURLのよくあるトラブルについて記載します。
署名付きURLをクリックすると以下のエラーが出力されることがあります。
署名付きURLのホスト部分に着目することで署名付きURLが有効かどうかを判断できます。
有効な署名付きURLにも関わらず、指定した期限よりも早くに失効してしまうケースです。
これは、AWSナレッジセンターで紹介されている次のケースに該当する可能性があります。
S3 バケットの署名付き URL が、指定した有効期限より前に失効する
以下はオブジェクトの書き込み操作のセクションになります。
オブジェクトの書き込み系のコマンド(
オブジェクトの書き込み系のコマンド(
コマンドの結果が100%予測できる場合を除いて、このオプションを付けて挙動を確認してから実行することを推奨します。
以降のコマンド例には
オブジェクトの書き込み系のコマンド(
これらのオプションの中でAWS CLI S3独自のパターン文字が使えます。正規表現に似ていますが別物なのでご注意ください。
(日本語訳の意味が分かりにくく申し訳ないのですが、後に出てくる使用例を参照頂くと幾分イメージが湧くと思います)
一方、
これにより、拡張子
言い換えると、拡張子
これにより、パスに
言い換えると、パスに
これにより、パスに
言い換えると、パスに
これにより、パスに
言い換えると、パスに
これにより、パスに
言い換えると、パスに
これにより、拡張子
これにより、パスに
これにより、パスに
これにより、パスに
これにより、パスに
S3のドキュメントではS3上のファイルのことを「オブジェクト」、S3外の場合は「ファイル」と呼称していますが、本セクションでは分かりやすさを優先して「ファイル」に呼称を統一します。
以下のコマンド例の場合、コピー元のファイル名と同じ名前でS3に単一ファイルをコピーします。
コピー先のプレフィックスを指定する場合、
コピー先のプレフィックスの末尾にスラッシュを付けない場合、ファイル名として認識されます。以下コマンド例では、
以下のコマンド例のように、コピー元のファイル名と違う名前でS3にファイルをコピーすることもできます。
ローカルからS3への単一ファイルコピーと引数の順番が逆になります。
コピー元とコピー先のバケットが違うリージョンの場合は
--exclude/--includeオプションのセクションを参照ください。
移動元のファイルが残らないという点が
その他の構文は
以下のコマンド例の場合、
以下のコマンド例の場合、
詳細は--exclude/--includeオプションのセクションを参照ください。
以下のコマンド例の場合、
オブジェクトの書き込み操作のセクションは以上です。
以下はバケットの管理のセクションになります。
このセクションではバケットのリスト操作に絞って記載します。
オプションを指定せずに実行すると、全てのバケットと作成日時がバケット名昇順で出力されます。
以下のコマンドでバケットを削除できます。
ただしバケットが空でない場合は削除に失敗します。
ただしバージョニングされたファイルがバケットに存在する場合、削除に失敗します。
AWS CLI S3コマンドのみで行う方法が見つけられませんでした。
AWSマネジメントコンソールから通常のバケットと同じように削除できます。
以下のコマンドでバケットの静的ウェブサイトホスティングを有効化できます。
コマンドが成功した場合、レスポンスは返ってきませんが、AWSマネジメントコンソールでバケットの [プロパティ] を見ると、静的ウェブサイトホスティングが有効化されていることが確認できます。
AWS CLI S3コマンドのチートシートです。
基本的なコマンドの使い方に加えて
awk
や grep
などのLinux系コマンドと組み合わせた便利なイディオムについて記載します。以下のAWS公式ドキュメントの内容をベースにしています。
- s3 — AWS CLI 1.16.38 Command Reference
- AWS Command Line Interface での高レベルの S3 コマンドの使用 - AWS Command Line Interface
目次
大きく3つのセクションに分けて記載しています。文量がかなり多くなってしまったので適宜ページ内検索などでジャンプ頂くのが良さそうです。-
オブジェクトの読み込み操作
-
オブジェクトの書き込み操作
-
バケットの管理
ls - オブジェクトのリスト
aws s3 ls
コマンドではS3のバケットやオブジェクトのリスト操作が行えます。このセクションではオブジェクトのリスト操作に絞って記載します。
- コマンドリファレンスのURL
オブジェクトとプレフィックスをリストする
S3 URIを指定するとオブジェクトとプレフィックスをリストできます。プレフィックスは
PRE
とマークされます。作成日時は出力されません。指定したバケット直下のオブジェクトとプレフィックスをリストする
$ aws s3 ls s3://example-mybucket PRE mydir-a/ 2018-10-20 23:28:42 3 bar.txt 2018-10-20 23:28:43 3 foo.txt
指定したプレフィックス直下のオブジェクトとプレフィックスをリストする
$ aws s3 ls s3://example-mybucket/mydir-a/ PRE mydir-b/ 2018-10-20 23:33:15 0 2018-10-20 23:33:40 4 fuga.txt 2018-10-20 23:33:40 4 hoge.txt
オブジェクトとプレフィックスを再帰的にリストする
--recursive
オプションを付けると再帰的にリストできます。プレフィックスはサイズが
0
で出力されます。作成日時も出力されます。オブジェクトとプレフィックスを再帰的にリストする
$ aws s3 ls s3://example-mybucket --recursive 2018-10-20 23:28:42 3 bar.txt 2018-10-20 23:28:43 3 foo.txt 2018-10-20 23:33:15 0 mydir-a/ 2018-10-20 23:33:40 4 mydir-a/fuga.txt 2018-10-20 23:33:40 4 mydir-a/hoge.txt 2018-10-20 23:40:43 0 mydir-a/mydir-b/ 2018-10-20 23:41:11 3 mydir-a/mydir-b/baz.txt
リスト結果をオブジェクトのみに絞り込む
grep
コマンドで末尾がスラッシュのものを除外することでオブジェクトのみをリストできます。リスト結果をオブジェクトのみに絞り込む
$ aws s3 ls s3://example-mybucket --recursive | grep -v '/$' 2018-10-20 23:28:42 3 bar.txt 2018-10-20 23:28:43 3 foo.txt 2018-10-20 23:33:40 4 mydir-a/fuga.txt 2018-10-20 23:33:40 4 mydir-a/hoge.txt 2018-10-20 23:41:11 3 mydir-a/mydir-b/baz.txt
リスト結果をプレフィックスのみに絞り込む
grep
コマンドで末尾がスラッシュのもののみに絞り込むことでプレフィックスのみをリストできます。リスト結果をプレフィックスのみに絞り込む
$ aws s3 ls s3://example-mybucket --recursive | grep '/$' 2018-10-20 23:33:15 0 mydir-a/ 2018-10-20 23:40:43 0 mydir-a/mydir-b/
オブジェクトとプレフィックスのみ出力する
awk
コマンドと組み合わせることで作成日時とデータサイズを出力せずに、オブジェクトとプレフィックスのみ出力できます。オブジェクトとプレフィックスのみ出力する
$ aws s3 ls s3://example-mybucket --recursive | awk '{print $4}' bar.txt foo.txt mydir-a/ mydir-a/fuga.txt mydir-a/hoge.txt mydir-a/mydir-b/ mydir-a/mydir-b/baz.txt
grep
コマンドを用いたイディオムと組み合わせることで、オブジェクトのみ、またはプレフィックスのみ出力できます。オブジェクトのみ出力する
$ aws s3 ls s3://example-mybucket --recursive | grep -v '/$' | awk '{print $4}' bar.txt foo.txt mydir-a/fuga.txt mydir-a/hoge.txt mydir-a/mydir-b/baz.txt
プレフィックスのみ出力する
$ aws s3 ls s3://example-mybucket --recursive | grep '/$' | awk '{print $4}' mydir-a/ mydir-a/mydir-b/
オブジェクトとプレフィックスのS3 URLを出力する
上記の応用でawk
コマンドのprint
にS3バケットのURLを付加することで、オブジェクトとプレフィックスのS3 URLを出力できます。オブジェクトとプレフィックスのS3URLを出力する
$ aws s3 ls s3://example-mybucket --recursive | awk '{print "s3://example-mybucket/"$4}' s3://example-mybucket/bar.txt s3://example-mybucket/foo.txt s3://example-mybucket/myfolder-a/ s3://example-mybucket/myfolder-a/fuga.txt s3://example-mybucket/myfolder-a/hoge.txt s3://example-mybucket/myfolder-a/myfolder-b/ s3://example-mybucket/myfolder-a/myfolder-b/baz.txt
データサイズに単位を付加する
--human-readable
オプションを付けるとデータサイズに単位Bytes/MiB/KiB/GiB/TiB/PiB/EiB
が付加されます。データサイズに単位を付加してオブジェクトとプレフィックスを再帰的にリストする
$ aws s3 ls s3://example-mybucket --recursive --human-readable 2018-10-20 23:28:42 3 Bytes bar.txt 2018-10-20 23:28:43 3 Bytes foo.txt 2018-10-20 23:33:15 0 Bytes mydir-a/ 2018-10-20 23:33:40 4 Bytes mydir-a/fuga.txt 2018-10-20 23:33:40 4 Bytes mydir-a/hoge.txt 2018-10-20 23:40:43 0 Bytes mydir-a/mydir-b/ 2018-10-20 23:41:11 3 Bytes mydir-a/mydir-b/baz.txt
作成日時やデータサイズでソートする
sort
コマンドと組み合わせることで作成日時やデータサイズなどでソートできます。-k
オプションでソートに使用する列の組み合わせを指定します。-r
オプションを付けると降順でソートされます。オブジェクトとプレフィックスを再帰的にリストし作成日時で昇順ソートする
$ aws s3 ls s3://example-mybucket --recursive | sort -k 1,2 2018-10-20 23:28:42 3 bar.txt 2018-10-20 23:28:43 3 foo.txt 2018-10-20 23:33:15 0 mydir-a/ 2018-10-20 23:33:40 4 mydir-a/fuga.txt 2018-10-20 23:33:40 4 mydir-a/hoge.txt 2018-10-20 23:40:43 0 mydir-a/mydir-b/ 2018-10-20 23:41:11 3 mydir-a/mydir-b/baz.txt
オブジェクトとプレフィックスを再帰的にリストし作成日時で降順ソートする
$ aws s3 ls s3://example-mybucket --recursive | sort -r -k 1,2 2018-10-20 23:41:11 3 mydir-a/mydir-b/baz.txt 2018-10-20 23:40:43 0 mydir-a/mydir-b/ 2018-10-20 23:33:40 4 mydir-a/hoge.txt 2018-10-20 23:33:40 4 mydir-a/fuga.txt 2018-10-20 23:33:15 0 mydir-a/ 2018-10-20 23:28:43 3 foo.txt 2018-10-20 23:28:42 3 bar.txt
オブジェクトとプレフィックスを再帰的にリストしデータサイズで昇順ソートする
$ aws s3 ls s3://example-mybucket --recursive | sort -k 3 2018-10-20 23:33:15 0 mydir-a/ 2018-10-20 23:40:43 0 mydir-a/mydir-b/ 2018-10-20 23:28:42 3 bar.txt 2018-10-20 23:28:43 3 foo.txt 2018-10-20 23:41:11 3 mydir-a/mydir-b/baz.txt 2018-10-20 23:33:40 4 mydir-a/fuga.txt 2018-10-20 23:33:40 4 mydir-a/hoge.txt
オブジェクトとプレフィックスを再帰的にリストしデータサイズで降順ソートする
$ aws s3 ls s3://example-mybucket --recursive | sort -r -k 3 2018-10-20 23:33:40 4 mydir-a/hoge.txt 2018-10-20 23:33:40 4 mydir-a/fuga.txt 2018-10-20 23:41:11 3 mydir-a/mydir-b/baz.txt 2018-10-20 23:28:43 3 foo.txt 2018-10-20 23:28:42 3 bar.txt 2018-10-20 23:40:43 0 mydir-a/mydir-b/ 2018-10-20 23:33:15 0 mydir-a/
オブジェクト数とデータサイズのサマリーを出力する
--summarize
オプションを付けるとaws s3 ls
コマンドの結果のオブジェクト数と合計データサイズが結果の末尾に出力されます。データサイズに単位を付加してオブジェクトとプレフィックスを再帰的にリストしサマリーを出力する
$ aws s3 ls s3://example-mybucket --recursive --human-readable --summarize 2018-10-20 23:28:42 3 Bytes bar.txt 2018-10-20 23:28:43 3 Bytes foo.txt 2018-10-20 23:33:15 0 Bytes mydir-a/ 2018-10-20 23:33:40 4 Bytes mydir-a/fuga.txt 2018-10-20 23:33:40 4 Bytes mydir-a/hoge.txt 2018-10-20 23:40:43 0 Bytes mydir-a/mydir-b/ 2018-10-20 23:41:11 3 Bytes mydir-a/mydir-b/baz.txt Total Objects: 7 Total Size: 17 Bytes
presign - 署名付きURLの発行
aws s3 presign
コマンドではS3オブジェクトの署名付きURLが発行できます。
署名付きURLを発行する
オプション無しで実行すると、有効期限1時間(3,600秒)の署名付きURLを発行できます。レスポンスのURLの
Expires
の数字はエポック秒です。以下のサイトなどで実際の日時を確認するのがオススメです。https://www.epochconverter.com/
署名付きURLを発行する
$ aws s3 presign s3://example-mybucket/foo.txt https://s3.us-west-2.amazonaws.com/example-mybucket/foo.txt?AWSAccessKeyId=xxx&Expires=1540214145&Signature=zzz
有効期限を指定して署名付きURLを発行する
--expires-in
オプションで署名付きURLの期限が切れるまでの秒数を指定できます。以下の例では7日間(604,800秒)を指定しています。
有効期限を指定して署名付きURLを発行する
$ aws s3 presign s3://example-mybucket/foo.txt --expires-in 604800 https://s3.us-west-2.amazonaws.com/example-mybucket/foo.txt?AWSAccessKeyId=xxx&Expires=1540214145&Signature=zzz
署名付きURLのよくあるトラブル
署名付きURLのよくあるトラブルについて記載します。
署名付きURLをクリックするとPermanentRedirect
と表示される
署名付きURLをクリックすると以下のエラーが出力されることがあります。- エラーコード:
PermanentRedirect
- エラーメッセージ:
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
aws s3 presign
コマンド実行時にリージョンが指定されていない可能性があります。署名付きURLのホスト部分に着目することで署名付きURLが有効かどうかを判断できます。
- 有効な署名付きURLの例 (URLのホスト名にリージョンが含まれている)
- 無効な署名付きURLの例 (URLのホスト名にリージョンが含まれていない)
aws s3 presign
コマンドを実行することで解決する可能性があります。以下の方法などでリージョンを指定することができます。-
aws configure
コマンドでデフォルトのリージョンを設定する -
aws s3 presign
コマンドにオプション--region us-west-2
などを追加する
--expires-in
オプションで指定した期間よりも早く有効期限が切れる
有効な署名付きURLにも関わらず、指定した期限よりも早くに失効してしまうケースです。これは、AWSナレッジセンターで紹介されている次のケースに該当する可能性があります。
S3 バケットの署名付き URL が、指定した有効期限より前に失効する
一時トークンを使用して署名付き URL を作成した場合、トークンが有効期限切れになると、URL は失効します。URL の有効期限がより長い場合でも失効します。オブジェクトの読み込み操作のセクションは以上です。
署名付き URL の作成に使用できる認証情報には以下が含まれます。
- AWS Identity and Access Management (IAM) インスタンスプロファイル: 最大 6 時間有効
- AWS Security Token Service (STS): 最大 36 時間有効 (AWS アカウントユーザーや IAM ユーザーの認証情報など、永続的認証情報を使用して署名した場合)
- IAM ユーザー: 最大 7 日間有効 (AWS 署名バージョン 4 を使用した場合)
以下はオブジェクトの書き込み操作のセクションになります。
オブジェクトの書き込み系コマンドに共通する2つのポイント
オブジェクトの書き込み系のコマンド(cp/mv/rm/sync
)について記載する前に、これらのコマンドに共通する2つのポイントを記載します。
--dryrun
オプション
オブジェクトの書き込み系のコマンド(cp/mv/rm/sync
)で利用できる最も重要なオプションです。--dryrun
オプションを付けることで、コマンドのシミュレーション結果が出力されます。あくまでシミュレーションであり実際にはコマンドは実行されません。コマンドの結果が100%予測できる場合を除いて、このオプションを付けて挙動を確認してから実行することを推奨します。
以降のコマンド例には
--dryrun
オプションを付与しますので、コピー&ペーストの際にはご注意ください。
--exclude/--include
オプション
オブジェクトの書き込み系のコマンド(cp/mv/rm/sync
)では--exclude/--include
オプションを用いて処理対象を絞り込むことができます。これらのオプションの中でAWS CLI S3独自のパターン文字が使えます。正規表現に似ていますが別物なのでご注意ください。
(日本語訳の意味が分かりにくく申し訳ないのですが、後に出てくる使用例を参照頂くと幾分イメージが湧くと思います)
パターン | 意味 |
---|---|
* |
全ての文字列にマッチするワイルドカード |
? |
任意の1文字にマッチするワイルドカード |
[sequence] |
括弧内のいずれかの文字にマッチする場合に真になる |
[!sequence] |
括弧内のいずれの文字にもマッチしない場合に真になる |
--exclude
オプションを用いると、指定したパターンにマッチするファイルを処理対象から除外し、それ以外の全てのファイルが処理対象となります。一方、
--include
は変わったオプションで、単独で使用しても効力がありません。--exclude
オプションと組み合わせることで初めて処理対象を絞り込むことができます。各オプションの使い分けのイメージは以下の通りです。-
--exclude
- 処理対象外のファイルを指定、それ以外の全てのファイルを処理対象とする
- ブラックリスト的なイメージ
-
--exclude
+--include
- 処理対象のファイルを指定、それ以外の全てのファイルを処理対象外とする
- ホワイトリスト的なイメージ
--exluce "*"
で一旦全てのファイルを対象外として、--include "*.png"
のように処理対象を指定するのが頻出のイディオムです。
--exclude
オプションによる処理対象の絞り込みの例
aws s3 cp
コマンドの例を記載します。--excludeオプションによる処理対象の絞り込み/ファイル・ディレクトリ構成
$ tree ./src/ ./src/ ├── mydir-a │ ├── mydir-b │ │ ├── test-c.png │ │ └── test-c.txt │ ├── test-b.png │ └── test-b.txt ├── test-a.png └── test-a.txt
拡張子png
のファイルを除外
--exclude
オプションに"*.png"
を指定します。これにより、拡張子
png
のファイルが除外されます。言い換えると、拡張子
png
以外のファイルが処理対象となります。拡張子`png`のファイルを除外
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*.png" --dryrun (dryrun) upload: src/mydir-a/mydir-b/test-c.txt to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.txt (dryrun) upload: src/mydir-a/test-b.txt to s3://example-mybucket-dest/mydir-a/test-b.txt (dryrun) upload: src/test-a.txt to s3://example-mybucket-dest/test-a.txt
パスにtest-a
を含むファイルを除外
--exclude
オプションに"*test-a*"
を指定します。これにより、パスに
test-a
を含むファイルが除外されます。言い換えると、パスに
test-a
を含まないファイルが処理対象となります。パスに`test-a`を含むファイルを除外
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*test-a*" --dryrun (dryrun) upload: src/mydir-a/mydir-b/test-c.png to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.png (dryrun) upload: src/mydir-a/mydir-b/test-c.txt to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.txt (dryrun) upload: src/mydir-a/test-b.png to s3://example-mybucket-dest/mydir-a/test-b.png (dryrun) upload: src/mydir-a/test-b.txt to s3://example-mybucket-dest/mydir-a/test-b.txt
パスにtest-a
またはtest-b
を含むファイルを除外 (--exclude
複数指定)
--exclude
オプションは複数指定することが可能です。以下コマンド例では2つの--exclude
オプションに"*test-a*"
と"*test-b*"
を指定しています。これにより、パスに
test-a
またはtest-b
を含むファイルが除外されます。言い換えると、パスに
test-a
及びtest-b
を含まないファイルが処理対象となります。パスに`test-a`または`test-b`を含むファイルを除外(`--exclude`複数指定)
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*test-a*" --exclude "*test-b*" --dryrun (dryrun) upload: src/mydir-a/mydir-b/test-c.png to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.png (dryrun) upload: src/mydir-a/mydir-b/test-c.txt to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.txt
パスにtest-a
またはtest-b
を含むファイルを除外 ([sequence]
指定)
--exclude
オプションに"*test-[ab]*"
を指定します。[ab]
の部分はAWS CLI S3独自のパターン構文で、括弧内のいずれかの文字にマッチする場合に真になります。これにより、パスに
test-a
またはtest-b
を含むファイルが除外されます。言い換えると、パスに
test-a
及びtest-b
を含まないファイルが処理対象となります。パスに`test-a`または`test-b`を含むファイルを除外(角括弧指定)
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*test-[ab]*" --dryrun (dryrun) upload: src/mydir-a/mydir-b/test-c.png to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.png (dryrun) upload: src/mydir-a/mydir-b/test-c.txt to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.txt
パスにtest-a
及びtest-b
を含まないファイルを除外 ([!sequence]
指定)
--exclude
オプションに"*test-[!ab]*"
を指定します。[!ab]
の部分はAWS CLI S3独自のパターン構文で、括弧内のいずれの文字にもマッチしない場合に真になります。これにより、パスに
test-a
及びtest-b
を含まないファイルが除外されます。言い換えると、パスに
test-a
またはtest-b
を含むファイルが処理対象となります。パスに`test-a`または`test-b`を含まないファイルを除外(角括弧指定)
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*test-[!ab]*" --dryrun (dryrun) upload: src/mydir-a/test-b.png to s3://example-mybucket-dest/mydir-a/test-b.png (dryrun) upload: src/mydir-a/test-b.txt to s3://example-mybucket-dest/mydir-a/test-b.txt (dryrun) upload: src/test-a.png to s3://example-mybucket-dest/test-a.png (dryrun) upload: src/test-a.txt to s3://example-mybucket-dest/test-a.txt
--exclude/--include
オプションによる処理対象の絞り込みの例
aws s3 cp
コマンドの例を記載します。--exclude/--includeオプションによる処理対象の絞り込み/ファイル・ディレクトリ構成
$ tree ./src/ ./src/ ├── mydir-a │ ├── mydir-b │ │ ├── test-c.png │ │ └── test-c.txt │ ├── test-b.png │ └── test-b.txt ├── test-a.png └── test-a.txt
拡張子png
のファイルのみを処理対象とする
--exclude
オプションに"*"
を指定、--include
オプションに"*.png"
を指定します。これにより、拡張子
png
のファイルのみが処理対象となります。拡張子`png`のファイルのみを処理対象とする
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*" --include "*.png" --dryrun (dryrun) upload: src/mydir-a/mydir-b/test-c.png to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.png (dryrun) upload: src/mydir-a/test-b.png to s3://example-mybucket-dest/mydir-a/test-b.png (dryrun) upload: src/test-a.png to s3://example-mybucket-dest/test-a.png
パスにtest-a
を含むファイルのみを処理対象とする
--exclude
オプションに"*"
を指定、--include
オプションに"*test-a*"
を指定します。これにより、パスに
test-a
を含むファイルのみが処理対象となります。パスに`test-a`を含むファイルのみを処理対象とする
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*" --include "*test-a*" --dryrun (dryrun) upload: src/test-a.png to s3://example-mybucket-dest/test-a.png (dryrun) upload: src/test-a.txt to s3://example-mybucket-dest/test-a.txt
パスにtest-a
またはtest-b
を含むファイルのみを処理対象とする (--include
複数指定)
--include
オプションは複数指定することが可能です。以下コマンド例では--exclude
オプションに"*"
を指定、2つの--include
オプションにそれぞれ"*test-a*"
と"*test-b*"
を指定しています。これにより、パスに
test-a
またはtest-b
を含むファイルのみが処理対象となります。パスに`test-a`または`test-b`を含むファイルを指定(`--include`複数指定)
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*" --include "*test-a*" --include "*test-b*" --dryrun (dryrun) upload: src/mydir-a/test-b.png to s3://example-mybucket-dest/mydir-a/test-b.png (dryrun) upload: src/mydir-a/test-b.txt to s3://example-mybucket-dest/mydir-a/test-b.txt (dryrun) upload: src/test-a.png to s3://example-mybucket-dest/test-a.png (dryrun) upload: src/test-a.txt to s3://example-mybucket-dest/test-a.txt
パスにtest-a
またはtest-b
を含むファイルのみを処理対象とする ([sequence]
指定)
--exclude
オプションに"*"
を指定、--include
オプションに"*test-[ab]*"
を指定します。これにより、パスに
test-a
またはtest-b
を含むファイルのみが処理対象となります。パスに`test-a`または`test-b`を含むファイルを指定(角括弧指定)
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*" --include "*test-[ab]*" --dryrun (dryrun) upload: src/mydir-a/test-b.png to s3://example-mybucket-dest/mydir-a/test-b.png (dryrun) upload: src/mydir-a/test-b.txt to s3://example-mybucket-dest/mydir-a/test-b.txt (dryrun) upload: src/test-a.png to s3://example-mybucket-dest/test-a.png (dryrun) upload: src/test-a.txt to s3://example-mybucket-dest/test-a.txt
パスにtest-a
及びtest-b
を含まないファイルのみを処理対象とする ([!sequence]
指定)
--exclude
オプションに"*"
を指定、--include
オプションに"*test-[!ab]*"
を指定します。これにより、パスに
test-a
及びtest-b
を含まないファイルのみが処理対象となります。パスに`test-a`及び`test-b`を含まないファイルのみを処理対象とする(角括弧指定)
$ aws s3 cp ./src s3://example-mybucket-dest --recursive --exclude "*" --include "*test-[!ab]*" --dryrun (dryrun) upload: src/mydir-a/mydir-b/test-c.png to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.png (dryrun) upload: src/mydir-a/mydir-b/test-c.txt to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.txt
cp - オブジェクトのコピー
aws s3 cp
コマンドではローカルからS3、S3からローカル、S3からS3へのファイルのコピーが行えます。S3のドキュメントではS3上のファイルのことを「オブジェクト」、S3外の場合は「ファイル」と呼称していますが、本セクションでは分かりやすさを優先して「ファイル」に呼称を統一します。
- コマンドリファレンスのURL
単一ファイルのコピー
ローカルからS3に単一ファイルをコピーする
以下のコマンド例の場合、コピー元のファイル名と同じ名前でS3に単一ファイルをコピーします。コピー先のプレフィックスを指定する場合、
mydir-a/
のように末尾にスラッシュを付ける必要があります。ローカルからS3に単一ファイルをコピーする
$ aws s3 cp test.txt s3://example-mybucket/mydir-a/ --dryrun (dryrun) upload: ./test.txt to s3://example-mybucket/mydir-a/test.txt
example-mybucket
バケット直下にmydir-a
というファイル名でコピーされます。コピー先のプレフィックスの末尾にスラッシュを付けずにローカルからS3に単一ファイルをコピーする
$ aws s3 cp test.txt s3://example-mybucket/mydir-a --dryrun (dryrun) upload: ./test.txt to s3://example-mybucket/mydir-a
コピー元のファイル名と違う名前でローカルからS3に単一ファイルをコピーする
$ aws s3 cp test.txt s3://example-mybucket/mydir-a/test2.txt --dryrun (dryrun) upload: ./test.txt to s3://example-mybucket/mydir-a/test2.txt
S3からローカルに単一ファイルをコピーする
ローカルからS3への単一ファイルコピーと引数の順番が逆になります。S3からローカルに単一ファイルをコピーする
# コピー元のファイル名と同じ名前でローカルのカレントディレクトリに単一ファイルをコピーする $ aws s3 cp s3://example-mybucket/foo.txt . --dryrun (dryrun) download: s3://example-mybucket/foo.txt to ./foo.txt # コピー元のファイル名と違う名前でローカルのカレントディレクトリに単一ファイルをコピーする $ aws s3 cp s3://example-mybucket/foo.txt ./bar.txt --dryrun (dryrun) download: s3://example-mybucket/foo.txt to ./bar.txt
S3からS3に単一ファイルをコピーする
コピー元とコピー先のバケットが違うリージョンの場合は--source-region
オプションでコピー元バケットのリージョンを指定する必要があります。S3からS3に単一ファイルをコピーする
# コピー元のファイル名と同じ名前でS3からS3に単一ファイルをコピーする $ aws s3 cp s3://example-mybucket-ap-northeast-1/foo.txt s3://example-mybucket-dest-ap-northeast-1 --dryrun (dryrun) copy: s3://example-mybucket-ap-northeast-1/foo.txt to s3://example-mybucket-dest-ap-northeast-1/foo.txt # コピー元のファイル名と違う名前でS3からS3に単一ファイルをコピーする $ aws s3 cp s3://example-mybucket-ap-northeast-1/foo.txt s3://example-mybucket-dest-ap-northeast-1/bar.txt --dryrun (dryrun) copy: s3://example-mybucket-ap-northeast-1/foo.txt to s3://example-mybucket-dest-ap-northeast-1/bar.txt # 違うリージョンのバケットに単一ファイルをコピーする $ aws s3 cp s3://example-mybucket-ap-northeast-1/foo.txt s3://example-mybucket-dest-us-west-2/bar.txt --source-region ap-northeast-1 --dryrun (dryrun) copy: s3://example-mybucket-ap-northeast-1/foo.txt to s3://example-mybucket-dest-us-west-2/bar.txt
複数ファイルのコピー
ローカルからS3に複数ファイルをコピーする
--recursive
オプションを付けると指定したディレクトリ配下のファイル・ディレクトリを再帰的にコピーできます。ローカルからS3に複数ファイルを再帰的にコピーする
$ tree ./src/ ./src/ ├── mydir-a │ ├── mydir-b │ │ ├── test-c.png │ │ └── test-c.txt │ ├── test-b.png │ └── test-b.txt ├── test-a.png └── test-a.txt $ aws s3 cp ./src/ s3://example-mybucket-dest --recursive --dryrun (dryrun) upload: src/mydir-a/mydir-b/test-c.png to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.png (dryrun) upload: src/mydir-a/mydir-b/test-c.txt to s3://example-mybucket-dest/mydir-a/mydir-b/test-c.txt (dryrun) upload: src/mydir-a/test-b.png to s3://example-mybucket-dest/mydir-a/test-b.png (dryrun) upload: src/mydir-a/test-b.txt to s3://example-mybucket-dest/mydir-a/test-b.txt (dryrun) upload: src/test-a.png to s3://example-mybucket-dest/test-a.png (dryrun) upload: src/test-a.txt to s3://example-mybucket-dest/test-a.txt
S3からローカルに複数ファイルをコピーする
S3からローカルに複数ファイルをコピーする
# ローカルのカレントディレクトリに複数ファイルをコピーする $ aws s3 cp s3://example-mybucket/mydir-a/ . --recursive --dryrun (dryrun) download: s3://example-mybucket/mydir-a/fuga.txt to ./fuga.txt (dryrun) download: s3://example-mybucket/mydir-a/hoge.txt to ./hoge.txt (dryrun) download: s3://example-mybucket/mydir-a/mydir-b/baz.txt to mydir-b/baz.txt # ローカルの`./test`ディレクトリに複数ファイルをコピーする # `./test`ディレクトリが存在しない場合、自動的に作成される $ aws s3 cp s3://example-mybucket/mydir-a/ ./test/ --recursive --dryrun (dryrun) download: s3://example-mybucket/foo.txt to ./bar.txt
S3からS3に複数ファイルをコピーする
S3からS3に複数ファイルをコピーする
# 別のバケットに複数ファイルをコピーする $ aws s3 cp s3://example-mybucket/mydir-a/ s3://example-mybucket-dest/mydir-a/ --recursive --dryrun (dryrun) copy: s3://example-mybucket/mydir-a/fuga.txt to s3://example-mybucket-dest/mydir-a/fuga.txt (dryrun) copy: s3://example-mybucket/mydir-a/hoge.txt to s3://example-mybucket-dest/mydir-a/hoge.txt (dryrun) copy: s3://example-mybucket/mydir-a/mydir-b/baz.txt to s3://example-mybucket-dest/mydir-a/mydir-b/baz.txt # 同じバケットの別のパスに複数ファイルをコピーする $ aws s3 cp s3://example-mybucket/mydir-a/ s3://example-mybucket/mydir-z/ --recursive --dryrun (dryrun) copy: s3://example-mybucket/mydir-a/fuga.txt to s3://example-mybucket/mydir-z/fuga.txt (dryrun) copy: s3://example-mybucket/mydir-a/hoge.txt to s3://example-mybucket/mydir-z/hoge.txt (dryrun) copy: s3://example-mybucket/mydir-a/mydir-b/baz.txt to s3://example-mybucket/mydir-z/mydir-b/baz.txt # 違うリージョンのバケットに複数ファイルをコピーする (`--source-region`オプションが必要) $ aws s3 cp s3://example-mybucket-ap-northeast-1/mydir-a/ s3://example-mybucket-dest-us-west-2/mydir-a/ --recursive --source-region ap-northeast-1 --dryrun (dryrun) copy: s3://example-mybucket-ap-northeast-1/mydir-a/fuga.txt to s3://example-mybucket-dest-us-west-2/mydir-a/fuga.txt (dryrun) copy: s3://example-mybucket-ap-northeast-1/mydir-a/hoge.txt to s3://example-mybucket-dest-us-west-2/mydir-a/hoge.txt (dryrun) copy: s3://example-mybucket-ap-northeast-1/mydir-a/mydir-b/baz.txt to s3://example-mybucket-dest-us-west-2/mydir-a/mydir-b/baz.txt
--exclude/--include
オプションを用いて対象を絞り込む
--exclude/--includeオプションのセクションを参照ください。
mv - オブジェクトの移動
aws s3 mv
コマンドではローカルからS3、S3からローカル、S3からS3へのファイルの移動が行えます。移動元のファイルが残らないという点が
aws s3 cp
コマンドと異なります。その他の構文は
aws s3 cp
とほとんど変わりませんので cp - オブジェクトのコピー のコマンド例を読み替えてください。- コマンドリファレンスのURL
rm - オブジェクトの削除
aws s3 rm
コマンドではS3のオブジェクトの削除が行えます。- コマンドリファレンスのURL
オブジェクトを削除する
以下のコマンド例の場合、example-mybucket
配下のfoo.txt
を削除します。オブジェクトを削除する
$ aws s3 rm s3://example-mybucket/foo.txt --dryrun (dryrun) delete: s3://example-mybucket/foo.txt
オブジェクトを再帰的に削除する
以下のコマンド例の場合、example-mybucket/mydir-a
配下の全てのプレフィックス及びオブジェクトを削除します。オブジェクトを再帰的に削除する
$ aws s3 rm s3://example-mybucket/mydir-a/ --recursive --dryrun (dryrun) delete: s3://example-mybucket/mydir-a/ (dryrun) delete: s3://example-mybucket/mydir-a/fuga.txt (dryrun) delete: s3://example-mybucket/mydir-a/hoge.txt (dryrun) delete: s3://example-mybucket/mydir-a/mydir-b/ (dryrun) delete: s3://example-mybucket/mydir-a/mydir-b/baz.txt
--exclude/--include
オプションを用いて対象を絞り込む
詳細は--exclude/--includeオプションのセクションを参照ください。以下のコマンド例の場合、
example-mybucket-dest/mydir-a/
配下で拡張子がpng
の全てのオブジェクトを削除します。拡張子が`png`の全てのオブジェクトを削除する
$ aws s3 rm s3://example-mybucket-dest/mydir-a/ --recursive --exclude "*" --include "*.png" --dryrun (dryrun) delete: s3://example-mybucket-dest/mydir-a/mydir-b/test-c.png (dryrun) delete: s3://example-mybucket-dest/mydir-a/test-b.png
sync - ファイル・ディレクトリの同期
aws s3 sync
コマンドではローカル/S3間、S3/ローカル間、S3/S3間のファイル・ディレクトリの同期が行えます。
<!-- syncのコマンド例は後日追記します -->
オブジェクトの書き込み操作のセクションは以上です。以下はバケットの管理のセクションになります。
ls - バケットのリスト
aws s3 ls
コマンドではS3のバケットやオブジェクトのリスト操作が行えます。このセクションではバケットのリスト操作に絞って記載します。
- コマンドリファレンスのURL
全てのバケットをリストする
オプションを指定せずに実行すると、全てのバケットと作成日時がバケット名昇順で出力されます。全てのバケットをリストする
$ aws s3 ls 2018-01-01 00:00:00 example-mybucket-1 2017-01-01 00:00:00 example-mybucket-2 2016-01-01 00:00:00 example-mybucket-3
全てのバケットをリストしてソートする
sort
コマンドと組み合わせることで作成日時やバケット名でソートできます。-k
オプションでソートに使用する列の組み合わせを指定します。-r
オプションを付けると降順でソートされます。全てのバケットをリストして作成日時で昇順ソートする
$ aws s3 ls | sort -k 1,2 2016-01-01 00:00:00 example-mybucket-3 2017-01-01 00:00:00 example-mybucket-2 2018-01-01 00:00:00 example-mybucket-1
全てのバケットをリストして作成日時で降順ソートする
$ aws s3 ls | sort -r -k 1,2 2018-01-01 00:00:00 example-mybucket-1 2017-01-01 00:00:00 example-mybucket-2 2016-01-01 00:00:00 example-mybucket-3
全てのバケットをリストしてバケット名で降順ソートする
$ aws s3 ls | sort -r -k 3 2016-01-01 00:00:00 example-mybucket-3 2017-01-01 00:00:00 example-mybucket-2 2018-01-01 00:00:00 example-mybucket-1
バケット名のみリストする
awk
コマンドと組み合わせることでバケット名のみリストできます。バケット名のみリストする
$ aws s3 ls | awk '{print $3}' example-mybucket-1 example-mybucket-2 example-mybucket-3
mb - バケットの作成
aws s3 mb
コマンドではS3バケットの作成が行えます。- コマンドリファレンスのURL
バケットを作成する
--region
オプションを省略するとaws configure
コマンドで設定されたデフォルトリージョンにバケットが作成されます。バケットを作成する
$ aws s3 mb s3://mybucket make_bucket: s3://mybucket
リージョンを指定してバケットを作成する
--region
オプションで指定したリージョンにバケットを作成できます。リージョンを指定してバケットを作成する
$ aws s3 mb s3://mybucket --region us-west-1 make_bucket: s3://mybucket
rb - バケットの削除
aws s3 rb
コマンドではS3バケットの削除が行えます。- コマンドリファレンスのURL
バケットを削除する
以下のコマンドでバケットを削除できます。ただしバケットが空でない場合は削除に失敗します。
バケットを削除する
$ aws s3 rb s3://mybucket remove_bucket: mybucket
バケットを強制的に削除する
--force
オプションを付けるとバケットの全オブジェクトが削除された後、バケットが削除されます。ただしバージョニングされたファイルがバケットに存在する場合、削除に失敗します。
バケットを強制的に削除する
$ aws s3 rb s3://mybucket --force delete: s3://mybucket/test1.txt delete: s3://mybucket/test2.txt remove_bucket: mybucket
バージョニングされたファイルが存在するバケットを削除する
AWS CLI S3コマンドのみで行う方法が見つけられませんでした。AWSマネジメントコンソールから通常のバケットと同じように削除できます。
website - 静的ウェブサイトホスティングの設定
aws s3 website
コマンドでは静的ウェブサイトホスティング用のバケット設定が行えます。
静的ウェブサイトホスティングを有効化する
以下のコマンドでバケットの静的ウェブサイトホスティングを有効化できます。コマンドが成功した場合、レスポンスは返ってきませんが、AWSマネジメントコンソールでバケットの [プロパティ] を見ると、静的ウェブサイトホスティングが有効化されていることが確認できます。
静的ウェブサイトホスティングを有効化する
$ aws s3 website s3://example-mybucket --index-document index.html --error-document error.html
コメント
コメントを投稿