この記事にはプロモーションが含まれていることがあります

AWS S3バケットからファイルをまとめて一括ダウンロードする

IT
スポンサーリンク

AWS CLIを使えばできる!

AWSマネジメントコンソールS3画面からは、なんと複数ファイル一括ダウンロードができません

Googleドライブのように複数選択した場合は、ZIPに固めてダウンロードしてくれれば便利なのですが、そもそもの用途が違うので仕方ないですかね。

一つひとつダウンロードすることは可能ですが、ファイル数が大量の場合はポチポチとマウスで操作してダウンロードしていると日が暮れてしまいます。

そんな時は、AWS CLIを使うことで、まとめて一括ダウンロード可能です。

AWS CLIが必要ですので、インストールと設定が済んでいない方はこちらご覧ください。

aws s3 cpコマンド

こんな感じで実行すると、指定したバケットの中身をすべてローカルに一括でダウンロードすることができます。フォルダ構造もそのまま再現してくれます。

構文

aws s3 cp s3://コピー元バケット名  パソコンのコピー先フォルダ  --recursive

以下、実際に動かしてみたものですが、これは便利です!

battan-image-boxバケット内のファイルをすべてパソコンにダウンロードしてみました。

Microsoft Windows [Version 10.0.19042.1110]
(c) Microsoft Corporation. All rights reserved.

c:\tmp> aws s3 cp s3://battan-image-box ./battan-image-box --recursive
download: s3://battan-image-box/input/P0030622.JPG to input\P0030622.JPG
download: s3://battan-image-box/thumbnails/DSC_0073.jpg to thumbnails\DSC_0073.jpg
download: s3://battan-image-box/input/P0030524.JPG to input\P0030524.JPG
download: s3://battan-image-box/input/dir1/IMG_3650.JPG to input\dir1\IMG_3650.JPG
download: s3://battan-image-box/thumbnails/P0030306.JPG to thumbnails\P0030306.JPG

C:\tmp>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は C64B-DF27 です

 C:\tmp のディレクトリ

2021/08/02  11:36    <DIR>          .
2021/08/02  11:36    <DIR>          ..
2021/08/02  11:36    <DIR>          battan-image-box
               0 個のファイル                   0 バイト
               3 個のディレクトリ   4,707,155,968 バイトの空き領域

C:\tmp>

接続先AWSアカウントの簡単な切替方法

接続先のプロフィールを作成しておくとコマンド実行時に切り替えることができて便利です。

例えば、このような感じで接続先を切り替えてダウンロードすることができます。プロフィールの設定はこちらの記事の最後のオマケ欄をご覧ください。

aws s3 cp s3://bucket-name c:\download --recursive --profile user1
おすすめ書籍の紹介コーナー

AWSは機能が多岐にわたり存在し、初心者が足を踏み入れるとほぼ100%迷います。まずはこの教科書で全体を広く浅く知ることが重要です。

AWSを使うメリットとして迅速なサービス運用環境の構築が求められます。失敗できない本番環境を構築する前に読んでおきたい一冊です。

そしていよいよAWS認定試験に挑戦したくなった場合は、こちらで徹底的に学習しましょう。これからはAWSです。

トラブルシューティング

このメッセージが表示される場合

fatal error: Unable to locate credentials

認証情報が未設定状態です。aws configure を実行してアクセスキーを登録してください。認証情報の登録方法は、前回の記事でやっていますのでそちらをご覧ください。

fatal error: An error occurred (InvalidAccessKeyId) when calling the ListObjectsV2 operation: The AWS Access Key Id you provided does not exist in our records.

アクセスキーIDが間違っている可能性が高いです。アクセスキーIDが登録されているかAWSマネジメントコンソールのIAMで確認してください。

fatal error: An error occurred (SignatureDoesNotMatch) when calling the ListObjectsV2 operation: The request signature we calculated does not match the signature you provided. Check your key and signing method.

シークレットアクセスキーが間違っている可能性が高いですので確認してください。

(ファイル名) An error occurred (AccessDenied) when calling the GetObject operation: Access Denied

コピーしようとしているファイルの読み取り権限がありません。アクセスコントロールリスト (ACL)またはポリシーを確認してください。

私がハマった時は、ポリシーでHTTPヘッダのUserAgentによるアクセス制限が入っていた時でした。CLIからアクセスする場合はCLIのUserAgentも許可する必要がありますので要注意です。参考までにCondition部分だけ抜粋

Condition": {
    "ForAllValues:StringNotLike": {
        "aws:UserAgent": [
            "*Android*",
            "aws-cli*" ←こんな感じでAWS CLIを追加
        ]
    }
}

コメント

タイトルとURLをコピーしました