Amazon S3 のフォルダを一括で保存する方法

AWS Management Console では、S3 内のフォルダを一括してダウンロードすることができません。
そのため、例えば S3 に日付毎にフォルダを作成して、システムログを保管していた場合は、1 つ 1 つフォルダを確認する必要があり、非常に手間がかかります。
一括ダウンロードするには、AWS CLI を使用する必要があります。
本記事では、Ubuntu 20.04 に AWS CLI を使用して、フォルダを一括ダウンロードする方法を紹介します。

前提条件

Ubuntu 20.0.4 に AWS CLI をインストールしておく必要があります。
AWS CLI のインストール方法については、以下の記事をご参照ください。

関連記事

Ubuntu Desktop 20.04 LTS に AWS CLI をインストールして、基本的な操作をするまでの手順です。 AWS CLI とは コマンドラインシェルのコマンドを使って AWS&n[…]

AWS CLI による一括 DL

構文

aws s3 cp コマンドを使用します。<source> はバケットの URI を指定、<target> は保存先を指定します。

aws s3 cp <source> <target> [--options]

実行例

S3 の example/logs フォルダを一括ダウンロードし、Ubuntu の ./tmp/awslogs に保存する例です。--recursive オプションにより、example/logs フォルダ内の全てのファイルがダウンロード対象になります。

aws s3 cp s3://example/logs/ ./tmp/awslogs --recursive

<source> に指定する URI は、AWS Management Console(以下の赤枠の部分)でコピーすることができます。パスが長い場合に便利です。

DL した .gz ファイルの一括解凍

DL したファイルは、.gz ファイルになっています。
ディレクトリ内の .gz ファイルを全て解凍するには、Ubuntu で次のコマンドを実行します。

 find . -name '*.gz' | xargs -n1 gunzip

解凍したファイルの結合

解凍した複数のファイルは、1 つに結合することが可能です。
例えば、解凍したログが以下だったとします。

$ ls /tmp/awslogs
examplelog01
examplelog02
examplelog03

上記を 1 つのファイルを結合し、examplelogs という名前で保存する場合は、Ubuntu で次のコマンドを実行します。

cat example* > examplelogs

また、各ファイルの中から特定の文字列(例えば https://exmaple.com)のみ抽出・結合して、examplelogs という名前で保存する場合は、Ubuntu で次のコマンドを実行します。

cat example* | grep https://example.com > examplelogs

aws s3 名前空間で高レベルの Amazon S3 コマンドを使用して、AWS CLI でバケットとオブジェクトを管…

以上

参考書籍