AWS SDKを利用してS3オブジェクト削除の際に「MultiObjectDeleteException」とのエラーが出てしまいました、対処方法を教えてください

2021.09.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

javaのaws sdkを利用して、S3に格納しているファイルの削除を行っております。
AmazonS3のdeleteObjectsメソッドを利用しておりますが、下記のエラーが発生して削除に失敗しました。
削除できなかった詳しい原因と対応方法を教えていただけないでしょうか。
対応方法を教えていただけないでしょうか。


Caused by: com.amazonaws.services.s3.model.MultiObjectDeleteException: One or more objects could not be deleted (Service: null; Status Code: 200; Error Code: null; Request ID: xxxxxxxxxxxxxxx; S3 Extended Request ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/RbCbxsYI=) atcom.amazonaws.services.s3.AmazonS3Client.deleteObjects(AmazonS3Client.java:2281)


発生原因

MultiObjectDeleteException は、AWS SDK for Java からスローされた例外となります。 下記ドキュメントの SDK リファレンスに記載がございます通り、こちらの例外は deleteObjects() 等のメソッドにより複数のオブジェクトを削除した際に、一部のリクエストが失敗した際にスローされる例外となっております。

MultiObjectDeleteException (AWS SDK for Java - 1.12.77)

  • public class MultiObjectDeleteException
  • extends AmazonS3Exception
  • implements Serializable
  • Exception for partial or total failure of the multi-object delete API, including the errors that occurred. For successfully deleted objects, refer to getDeletedObjects().

具体的な対処法

この場合、getDeletedObjects() メソッドを呼び出すことにより、削除に成功したオブジェクトの一覧が取得できますため、失敗したオブジェクトについてリトライを実施いただくことが可能です。
お客様のアプリケーションにて、MultiObjectDeleteException 例外が発生した場合に例外を補足し、リクエストのリトライを実施するよう例外処理の実装をご検討ください。

参考資料

[1]Amazon S3 のエラーに関するベストプラクティス - Amazon Simple Storage Service