S3バケットへのアクセスログを有効にしたものの、ログファイルが細かく分かれてしまい検索が難しい。。。
そこで一括で検索できればよいなと思い、作成しました。
下記を参考にさせていただきました。
こちらはシェルスクリプトでしたが、Windows環境で実行する用にバッチファイルに変換しました。
https://dev.classmethod.jp/cloud/aws/grep-s3-files-by-aws-cli/
s3loggrep.bat
rem You need to install jq.
rem どのログファイルに文字列がヒットしたか知りたいため、あえてecho on にしています。
rem @echo off
rem AWS CLIのクレデンシャル情報を分けている場合は、プロファイル名を指定します。
rem 分けてなければ"default"でよいです。
set PROF_NAME="default"
rem 検索対象のバケット名を指定します。
set S3_BUCKET=testbacket
rem ログファイルの接頭辞を指定します。
set S3_KEY_PREFEX="testlog"
rem 検索したい文字列を指定します。
set SEARCH_STR="hogehoge"
rem list-objects-v2の出力を、jqを用いることで"Key"のみを抽出し、
rem さらに↑で指定した接頭辞で絞ってテキストファイルに出力します。
aws s3api list-objects-v2 --bucket %S3_BUCKET% --profile %PROF_NAME% |jq -r ".Contents[].Key" |findstr %S3_KEY_PREFEX% > list.txt
rem ログ名の降順でソートして別のテキストファイルに出力します。
sort /r list.txt > list2.txt
rem テキストファイルから順番にKeyを呼び出し、文字列を検索するループ処理です。
for /f %%i in (list2.txt) do (
aws s3 cp s3://%S3_BUCKET%/%%i - --profile %PROF_NAME% | findstr %SEARCH_STR%
)