すべての「aws s3」ダウンロードが完了したら、どのように通知を受け取りますか?

すべての「aws s3」ダウンロードが完了したら、どのように通知を受け取りますか?

bashファイルを使って大量のaws s3ダウンロードを実行します。

aws s3 cp s3://my-bucket/file0001.txt file0001.txt &
aws s3 cp s3://my-bucket/file0002.txt file0002.txt &
aws s3 cp s3://my-bucket/file0003.txt file0003.txt &
...

もちろん、ご存知のように、最後のコマンドはコマンドをブロックしないように&します。aws s3

ブロックされていない通話がすべて完了したら通知を受け取るための良い方法はありますか? AWS では、全体的な進捗状況を監視する方法を提供していますか?

ベストアンサー1

最後に、指定された時間に10個の同時s3ダウンロードのみが発生するようにPythonスクリプトを作成しました。

#!/usr/bin/env python3
import os
import sys
import boto3
from multiprocessing import Pool


BUCKET = "my-bucket"

s3 = boto3.client("s3")


def download_s3_file(params):
    """ If the files exists, assume download is already performed and done
    """
    src, dest = params
    if os.path.exists(dest) and os.path.isfile(dest):
        print(f"The file {dest} is already downloaded ")
        return
    print("Downloading", BUCKET, src, dest)
    print("process id:", os.getpid())
    try:
        s3.download_file(BUCKET, src, dest)
    except Exception as e:
        print(e)


def main():
    filelist = sys.argv[1]
    print("parent process:", os.getpid())
    print("Working on ", filelist)
    jobs = []
    for l in open(filelist, "r"):
        # Ignore commented lines
        if not l.startswith("#"):
            src, dest = l.strip().split(",")
            jobs.append((src, dest,))
    with Pool(10) as p:
        p.map(download_s3_file, jobs)


if __name__ == "__main__":
    main()

おすすめ記事