はじめに
最終更新日をキーとして、S3バケットから指定期間内に更新されたオブジェクト(ファイル)をダウンロードするスクリプトです。
背景と必要性
たくさんのファイルが格納されているS3のバケットから特定期間に格納したファイルをダウンロードしようと思ったのですが、ご覧の通りAWSのマネジメントコンソールではオブジェクト名
以外の項目では表示順を変えられないっぽいのと、ダウンロード対象のファイル数が結構多そうだったので、手作業はきついなと思い CLIをたたくスクリプトを書きました。
スクリプト
必要な情報をパラメータで指定して実行すれば繰り返し利用できるような形でまとめてみました。
DownloadS3Obj.ps1
<#
.SYNOPSIS
S3から指定した期間(最終更新日時)のファイルをダウンロードします。
.DESCRIPTION
特になし
.PARAMETER bucketName
バケット名を指定します。
.PARAMETER prefix
フォルダのパスを指定します。
.PARAMETER from
ダウンロードするファイルの最終更新日(最小値)を指定します。
.PARAMETER to
ダウンロードするファイルの最終更新日(最大値)を指定します。
#>
Param(
[string]$bucketName,
[string]$prefix,
[string]$from,
[string]$to
)
$outputDir = "$(Get-Date -Format 'yyyyMMddHHmmss')"
# ダウンロード先フォルダの作成
New-Item -ItemType Directory -Name $outputDir
# ファイルをダウンロード
aws s3api list-objects `
--bucket $bucketName `
--prefix $prefix `
--query "Contents[?LastModified>='$from' && LastModified<='$to'].[Key]" `
--output text `
| ForEach-Object { aws s3 cp --no-progress s3://$bucketName/$_ ./$outputDir/ }
特に解説とかはありませんが、せっかくなのでChatGPT
に説明してもらいましょう。
実行例
PS C:\Users\xxxx\Desktop> .\DownloadS3Obj.ps1 -bucketName bucket-logcsv -prefix 3b077cad-fda9-4d1b6/ -from 2022-03-08 -to 2022-03-10
ディレクトリ: C:\Users\xxxx\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2023/02/16 16:55 20230216165519
download: s3://bucket-logcsv/3b077cad-fda9-4d1b6/0072046a-7b1d-4944-855b.csv to 20230216165519\0072046a-7b1d-4944-855b.csv
download: s3://bucket-logcsv/3b077cad-fda9-4d1b6/00b8ecca-850e-4020-affc.csv to 20230216165519\00b8ecca-850e-4020-affc.csv
download: s3://bucket-logcsv/3b077cad-fda9-4d1b6/010bdb06-4673-40ba-9ef2.csv to 20230216165519\010bdb06-4673-40ba-9ef2.csv
download: s3://bucket-logcsv/3b077cad-fda9-4d1b6/0377154b-8ee7-4f9e-abb1.csv to 20230216165519\0377154b-8ee7-4f9e-abb1.csv
download: s3://bucket-logcsv/3b077cad-fda9-4d1b6/03e3e00b-5362-4837-855c.csv to 20230216165519\03e3e00b-5362-4837-855c.csv
download: s3://bucket-logcsv/3b077cad-fda9-4d1b6/04b2fd8f-3b4c-4e3d-b432.csv to 20230216165519\04b2fd8f-3b4c-4e3d-b432.csv
download: s3://bucket-logcsv/3b077cad-fda9-4d1b6/05846e8a-758c-467d-b226.csv to 20230216165519\05846e8a-758c-467d-b226.csv
まとめ
スクリプトを作るにあたり、ぱっと見ではネット上にそのまま使える情報を見つけられなかったので、メモとして記事にしました。