薄っぺらりん

厚くしていきたい

S3 BatchReplication 500エラーの対応方法

S3 BatchReplicationを使用することでバケットレプリケーションルールを元に既存のオブジェクトをレプリケートすることができます。便利ですね。
レプリケーションにより作成されたオブジェクトを完全に削除(削除マーカーごと削除)し、その後再びS3 BatchReplicationを行うと失敗します。
その際、ログには次のように記録されます。

<Bucket>,<Key>,<VersionId>,failed,500,DstObjectHardDeleted,Currently object can't be replicated if this object previously existed in the destination but was recently deleted. Please try again at a later time

こうなった場合、バージョン情報を捨てても構わない場合は、S3 BatchOperationのコピージョブでオブジェクトをコピーすることができます。
レプリケーション先のバケットに何らかの理由によりコピージョブでのコピーが難しい場合は、レプリケーション元オブジェクトをコピージョブにより上書きすることでもコピーできます。
レプリケーション元オブジェクトを上書きした場合は、そのバケットレプリケーションルールにより新しいバージョンのオブジェクトがレプリケートされます。

今回、コピージョブによるコピーができない環境だったので、オブジェクトを上書きする方法で急場を凌ぎました。

500エラーのメッセージからは「後でもう一度試して」と言われていますが、2日ほど待ってもエラーは解消しませんでした。
何日か待っているとちゃんとレプリケーションが成功するようになるので、急がないのであれば待っているのがいいかもしれません。