AWS CLI S3 チートシート

AWS CLI S3 チートシート:

AWS CLI S3コマンドのチートシートです。

基本的なコマンドの使い方に加えて awkgrep などのLinux系コマンドと組み合わせた便利なイディオムについて記載します。

以下のAWS公式ドキュメントの内容をベースにしています。


目次

大きく3つのセクションに分けて記載しています。文量がかなり多くなってしまったので適宜ページ内検索などでジャンプ頂くのが良さそうです。


ls - オブジェクトのリスト

aws s3 lsコマンドではS3のバケットやオブジェクトのリスト操作が行えます。

このセクションではオブジェクトのリスト操作に絞って記載します。


オブジェクトとプレフィックスをリストする

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が有効かどうかを判断できます。

リージョンを指定して再度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外の場合は「ファイル」と呼称していますが、本セクションでは分かりやすさを優先して「ファイル」に呼称を統一します。


単一ファイルのコピー


ローカルから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にファイルをコピーすることもできます。

コピー元のファイル名と違う名前でローカルから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 - オブジェクトのコピー のコマンド例を読み替えてください。


rm - オブジェクトの削除

aws s3 rmコマンドではS3のオブジェクトの削除が行えます。


オブジェクトを削除する

以下のコマンド例の場合、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のバケットやオブジェクトのリスト操作が行えます。

このセクションではバケットのリスト操作に絞って記載します。


全てのバケットをリストする

オプションを指定せずに実行すると、全てのバケットと作成日時がバケット名昇順で出力されます。

全てのバケットをリストする
$ 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バケットの作成が行えます。


バケットを作成する

--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バケットの削除が行えます。


バケットを削除する

以下のコマンドでバケットを削除できます。

ただしバケットが空でない場合は削除に失敗します。

バケットを削除する
$ 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 

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)