ワンライナーで S3 から最新のファイルを取ってくる

Posted on

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 つ目の要素を取っています。これでファイルのキーが取得できます。

ちなみに、まったく同一のタイムスタンプだった場合は意図しないファイルが取れるのでご注意を。

Popular Entries

Recent Entries