やりたいこと
同じprefixを持つ100個くらいのS3オブジェクト群から、プレフィクスの完全一致、キー名の部分一致、最終更新日の範囲指定により抽出して一括で操作したい。
こまったこと
- S3のマネージメントコンソールでは、プレフィクス指定抽出のみ可能。
解決策
- AWS CLIを使う。
- aws cli s3api list-object の --prefix と --query で条件を指定して取得してパイプし、jq等でキー名を抽出する。
- --query はJMESPathによる表記で、条件結合、部分一致、ソートなどが可能。
- aws cli s3api list-object の --prefix と --query で条件を指定して取得してパイプし、jq等でキー名を抽出する。
コマンド例
- AWS CLIとjqのセットアップ済み環境を想定。
$ aws s3api list-object --bucket my_bucket --prefix 'my_prefix' --query 'Contents[?contains(Key, `“部分一致させる文字列“`) && LastModified >= `2017-08-20`][Key]' | \
jq 'flatten | "s3://my_bucket/" + .[]' | \
xargs -I{} echo 'target: {}'
#=> target: s3://my_bucket/my_prefix/2017-08-20.log
#=> target: s3://my_bucket/my_prefix/2017-08-21.log
情報源
- コマンド例 → https://stackoverflow.com/a/27274997
- JMESPathのチュートリアル → http://jmespath.org/tutorial.html
- JMESPathの仕様(論理結合の書き方や関数一覧あり) → http://jmespath.org/specification.html