JavaでS3オブジェクトをまとめて最大1000件削除する(DeleteObjectsRequest)

JavaでS3オブジェクトをまとめて最大1000件削除する(DeleteObjectsRequest)

S3オブジェクトをまとめて削除したい場合は、DeleteObjectsRequestクラスを使用して1000件まで一気に削除することができます。

オブジェクトを1つごと削除していると無駄な通信が増えてしまうので纏めて削除する場合はこのクラスを使用するのがお勧めです。

但し最大1000件までしか削除できないので、1000件以上削除するにはループしてあげないといけません。

@Component
@Scope("prototype")
@RequiredArgsConstructor
public class Hoge() {
  private final AmazonS3 s3;
  private final S3Config config; // S3の情報持っていると仮定
  public Integer deleteMultipleObjects(List<String> deleteTarget){
    Integer count = 0;
    int size = 1000;
    for (int i = 0; i < deleteTarget.size(); i += size) {
      List<String> list = new ArrayList<>(
        deleteTarget.subList(i, Math.min(i + size, deleteTarget.size()))
      );
      String[] keyArray = list.toArray(new String[list.size()]);
      DeleteObjectsResult result
        = s3.deleteObjects(new DeleteObjectsRequest(config.getBucket()).withKeys(keyArray).withQuiet(false));
      count += result.getDeletedObjects().size();
    }
    return count;
  }
}

参考サイト

Amazon S3で複数のオブジェクトをまとめて消せるようになりました | DevelopersIO
オブジェクトをまとめて消すことができます Amazon S3において、オブジェクトの削除はひとつずつ命令する必要がありました。これは、HTTPのオーバーヘッドが発生するため、効率的ではありませんでした。今度の機能改善によ …

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました