ワンライナーで S3 から最新のファイルを取ってくる
Posted on
- #aws
S3 から最新のファイルを 1 つだけ取ってくるのに苦労したので、備忘録代わりにブログに書いておきます。
Auto Scaling する時に CloudInit で S3 からリリース用のバイナリファイルを取ってきたいのですが、ファイル名に頼らずファイルの更新日で取得したかったのです。
AWS CLI の --query
オプションの sort_by 関数を使えばできるかなと思いましたが、うまくいかなくて jq コマンドを使いました。
$ aws s3api list-objects \
--bucket ${bucket_name} \
--prefix path/to/release | \
jq -r '.Contents | sort_by(.LastModified) | reverse | .[0] | .Key'
LastModified
のキーでソートして、降順に並べ替えて 1 つ目の要素を取っています。これでファイルのキーが取得できます。
ちなみに、まったく同一のタイムスタンプだった場合は意図しないファイルが取れるのでご注意を。