元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

S3 あるディレクトリ(プレフィクス)のオブジェクトを一括削除(AWS SDK for Ruby)

railsのaws-sdk gemを使ってs3のフォルダ(folder)を削除する

上記記事の方法はSDK v1のものなので。

削除対象のkeyのリスト作成回りとが非常にダサいですが、取り急ぎこんな感じでしょうか。

s3 = Aws::S3::Client.new
pager = s3.list_objects(bucket: bucket, # "hoge-bucket"
                        prefix: prefix, # "path/to/object/"
                        max_keys: 100)
while true do
  objects = pager.contents.map(&:key).map{|key| {key: key}}
  if objects.present?
    resp = s3.delete_objects(bucket: bucket,
                             delete: {
                                 objects: objects
                             })
  end
  break if pager.last_page?
  pager = pager.next_page
end

実際には接続エラーなどをケアする必要がありますね、きっと。