S3上のオブジェクトをフォルダごとダウンロードする方法 [GUI/CUI編]

S3上のオブジェクトを、GUI/CUIそれぞれでダウンロードする方法
2021.02.27

こんにちは。

S3のマネジメントコンソールからオブジェクトをフォルダ単位でダウンロードできないのは、不便だなーと感じるポイントだと思います。こちらは、現時点(2021/2/27)の仕様であり仕方ないのですが、3rd Party製のアプリケーションやAWS CLIでは実現可能です。今回は、GUI(3rd Party製アプリケーション)とCUI(AWS CLI)、それぞれの方法を試してみたいと思います。

GUI

S3上のファイルをGUIから操作する方法として、Windowsをお使いの会社ではほとんどが「WinSCP」をお使いではないでしょうか。こちらに関する記事はインターネット上に多く存在するため、今回はチームの先輩に教えてもらった「Cyberduck」を使ってみたいと思います。

1. Cyberduckのダウンロードとインストール

以下URLからダウンロードし、インストールしてください。

2. S3への接続

今回は一時クレデンシャルを使用して接続するため、こちらから接続用のプロファイル「S3 (Credentials from AWS Security Token Service) connection profile for preconfigured settings.」をダウンロードし、ダブルクリックしてください。何か不明点があれば、ドキュメントはこちらになりますので、併せてご確認ください。
以下の様な設定画面が表示されるので、お使いのクレデンシャル情報(credentialsファイルのセクション名)とパス(バケット名)を入力して、閉じてください。

3. S3への接続

先述の手順で接続先が設定されたBookmarkが作成されますのでダブルクリックしてください。わたしは、MFAが有効化されているため、こちらを入力すると目的のバケットへ接続されます。

4. フォルダごとダウンロード

目的のフォルダを右クリックすると、コンテキストメニューが一覧されます。目的のフォルダを選択してダウンロードをしてみます。
無事、ダウンロードできました。
なお、Windowsのエクスプローラーに統合した「Montain Duck」というアプリケーションもあります。今回は試せていないですが、こちらも便利そうです。

CUI

AWS CLI のS3にて再帰オプション(--recursive)を使用することで可能です。
マニュアルはこちら。
簡単ではありますが、実行例です。実行後に、目的のフォルダとオブジェクトがダウンロードできていることが確認できます。
1. カレントディレクトリとS3上のフォルダを確認
$ ~/tmp
% ll
合計 0
$ ~/tmp
% aws s3 ls | grep s3-test-20210227
2021-02-27 09:57:43 s3-test-20210227

2. cpコマンドに再帰オプション(--recursive)を付けてカレントディレクトリにダウンロード
$ ~/tmp
% aws s3 cp s3://s3-test-20210227 . --recursive
download: s3://s3-test-20210227/folder01/text03.txt to folder01/text03.txt
download: s3://s3-test-20210227/folder01/text01.txt to folder01/text01.txt
download: s3://s3-test-20210227/folder01/text02.txt to folder01/text02.txt

3. 実行結果の確認
$ ~/tmp
% ll -R
.:
合計 0
drwxr-xr-x 1 nzw nzw 4096  2月 27 11:37 folder01

./folder01:
合計 312
-rw-r--r-- 1 nzw nzw 103064  2月 27 08:56 text01.txt
-rw-r--r-- 1 nzw nzw 103064  2月 27 08:56 text02.txt
-rw-r--r-- 1 nzw nzw 103064  2月 27 08:56 text03.txt

余談

S3におけるフォルダの概念について、入社まで完全に勘違いしていました。
弊社の以下ブログが、この理解に役立ちますのでこちらも参照いただけますと幸いです。
以上です。