AWS S3からほかのサーバーにファイルを一括でダウンロードする

AWS S3からファイルを一括ダウンロードするには、公式クライアントであるaws-cliが便利です。 ほかにもツールがあるようですが、今回の用途のためには公式ツール一択と考えて良いでしょう。

aws-cliをダウンロード

S3からほかのサーバーにファイルを移行する場合は、aws-cliが便利です。 まずは、移行先のサーバーにaws-cliをインストールします。

公式ドキュメントは以下の通り。

docs.aws.amazon.com

Python 2.6.5以上またはPython3.3以上が必要なので、もしインストールされていなければインストールします。

yum info python
yum install -y python python-pip
pip install awscli --upgrade --user

awsコマンドを使えるようにパスを通して、aws --versionで確認をします。

$ ls ~/.local/bin
  aws
$ export PATH=~/.local/bin:$PATH
$ source ~/.bash_profile
$ aws --version
  aws-cli/1.11.84 Python/3.6.2 Linux/4.4.0-59-generic botocore/1.5.47

次にaws-cliの設定を行います。

docs.aws.amazon.com

aws-cliの設定には、IAMユーザーのアクセスキーとシークレットアクセスキーが必要です。 IAMユーザーとは、Identity and Access Managementを省略されたもので、ユーザー毎にアクセス権限が設定されています。

初めて作成するAWS アカウントはルートユーザーと呼ばれ、AWS上のすべてのサービスに対して完全なアクセス権限を持っています。 サーバーで言うrootユーザーと同じで権限が強すぎるため、適切に権限を割り当てたIAMユーザーを作成して、これを使うことが推奨されています。

まだ、ユーザーを作成していない場合やユーザーを追加したい場合は、IAMコンソールにアクセスし「ユーザー追加」をクリックします。 作成途中の権限設定で、「AmazonS3FullAccess」を選択するようにしてください。

$ aws configure
  AWS Access Key ID [None]: アクセスキーを入力
  AWS Secret Access Key [None]: シークレットアクセスキーを入力
  Default region name [None]: 東京の場合はap-northeast-1と入力
  Default output format [None]: json

設定がうまくいっているか確認するために、s3のバケットを確認します。

$ aws s3 ls
  2016-10-17 18:49:32 example.com

S3からダウンロード

ファイルのダウンロードはコマンドひとつで可能です。 ディレクトリ内のファイルをすべてダウンロードする場合は、オプション--recursiveをつけます。

aws s3 cp s3://バケット名/ディレクトリ/ /保存先ディレクトリ/ --recursive

たとえば、以下のようなコマンドになります。

aws s3 cp s3://example.com/wp-content/uploads/ /var/www/html/wp-content/ --recursive