NEWSニュース&ブログ

【AWS】S3上のファイルをAWS CLIとPythonでまとめてダウンロードしてみよう

投稿日:2025/3/13

はじめに

こんにちは、システムサポートの大庭です。今回はS3上のファイルをAWS CLIとPythonを使用してダウンロードする方法を紹介します。
S3上の複数のファイルをローカルにダウンロードしたいときに、コンソール上では1つずつしか選択できずに困った経験はありませんか?
そのようなケースに役立つと思います。

前提条件

今回、処理を動かす上で必要な前提条件は以下です。
・ローカルとS3のネットワークの疎通ができており、操作に必要な権限が実行ユーザーに与えられていること
・事前にAWS CLIやPythonのインストールができていること

AWS CLIを使用する方法

AWS CLIはコマンドプロンプトから手軽に実行できるので、サクッと使用したい場合にオススメです。
また、AWS CLIの検索コマンド(ls)などと併用するとCUIを操作する感覚で扱うことができます。
AWS CLIのコマンドは以下です。

aws s3 cp (S3のURI) (ローカルのパス) --recursive (--include "*ファイル名*") (--exclude "*ファイル名*")

・コマンドの説明
 ダウンロードしたいS3のURIを指定して、ダウンロードしたいローカルのパスを指定することでダウンロードができます。
 ただし、サブフォルダも含まれてしまうのでオプションで必要に応じて除外する必要があります。
 S3のURIとローカルのパスを入れ替えることでS3の指定したディレクトリへアップロードすることもできます。

・各オプションの説明
 recursive:再帰的に処理を実行します
 include :指定したファイル名を含むファイルに絞り込みます
 exclude  :指定したファイル名を含むファイルを除外します

Pythonを使用する方法

Pythonはスクリプトファイルとして保存するので、同じ処理を何度もする場合にオススメです。
また、引数でバケット名やファイル名を指定することでより汎用性が向上します。
他にも複雑な条件を付けたり、処理を追加したりすることもできます。
Pythonのスクリプトは以下です。

import boto3
import os

# バケット名、検索キーワード、ダウンロード先を指定
BUCKET_NAME = 'bucket-name' # バケット名
S3_PREFIX = 'folder1/folder2/' # バケット内のフォルダパス
SEARCH_FILENAME = 'file-name' # 検索キーワード
LOCAL_DOWNLOAD_PATH = 'download-path' # ダウンロード先のパス

try:
    s3_client = boto3.client('s3')

    # バケット内のオブジェクトを検索
    paginator = s3_client.get_paginator('list_objects_v2')
    pages = paginator.paginate(Bucket=BUCKET_NAME, Prefix=S3_PREFIX)

    # キーワードを含むファイルをダウンロード
    for page in pages:
        if 'Contents' in page:
            for obj in page['Contents']:
            file_key = obj['Key']
            if SEARCH_FILENAME in file_key and not file_key.endswith('/'):
                # ローカルのファイルパスを作成
                local_file_path = os.path.join(LOCAL_DOWNLOAD_PATH, os.path.basename(file_key))

                print(f"Downloading: {file_key} to {local_file_path}")

                # ダウンロード実行
                s3_client.download_file(
                BUCKET_NAME,
                file_key,
                local_file_path
              )

# ダウンロードの正常終了を通知
print("Download completed")

# ダウンロードの異常終了を通知
except Exception as e:
    print(f"Error occurred: {str(e)}")

以下のケースを例にします。
バケット配下にtestフォルダがあり、更にその配下にstsworkというフォルダがあり
その中にcsvファイルが3つあるとします。

この3ファイルをローカルのCドライブ配下のtestというフォルダにコピーしたい場合、以下のように設定します。

S3_PREFIX = 'test/stswork/' 
SEARCH_FILENAME = 'test' 
LOCAL_DOWNLOAD_PATH = 'C:\test'

こちらを任意のスクリプト名で保存し実行すると、以下のように結果を取得できます。



まとめ

今回はS3上のファイルをAWS CLIとPythonを使用してダウンロードする方法を紹介しました。
コンソールでの操作ではできないこと操作しづらいこともAWS CLIやPythonなどのスクリプトを使用することで
解決することがあるので、是非使ってみてください!


大庭悠太郎(1998年生まれ 2024年入社)
株式会社システムサポート フューチャーイノベーション事業本部

ソリューションサービス事業部所属。