[アップデート] Amazon S3のレプリケーションに失敗したオブジェクトに対して、ライフサイクルルール経由のExpiration・Transitionアクションが自動で一時停止されるようになりました

[アップデート] Amazon S3のレプリケーションに失敗したオブジェクトに対して、ライフサイクルルール経由のExpiration・Transitionアクションが自動で一時停止されるようになりました

Amazon S3レプリケーションがFAILEDやPENDINGになっても、ライフサイクルルールで勝手に削除されないようになっています。
2026.04.17

はじめに

おのやんです。

Amazon S3(以下、S3)のレプリケーションに失敗したオブジェクトに対して、ライフサイクルルール経由のExpiration・Transitionアクションが自動で一時停止されるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/03/s3-lifecycle-pauses-actions-on-objects/

今まで、S3ライフサイクルやS3レプリケーションを設定しているS3バケットでは、何らかの理由でレプリケーションが失敗してオブジェクトのステータスがFAILEDになっても、ライフサイクルルールによって有効期限切れからの削除や移行がされていました。レプリケーションが失敗する理由としては、IAMロールの権限不足やKMSキーポリシーの不備、宛先バケットが存在しないなどが挙げられます。

それが今回のアップデートにより、レプリケーションステータスがFAILEDまたはPENDINGのオブジェクトに対して、ライフサイクルのExpirationおよびTransitionアクションが自動で一時停止されるようになりました。こちらは既存・新規を問わず、すべてのS3ライフサイクル設定に自動で段階的に適用されます。

For objects with a PENDING or FAILED replication status, Amazon S3 doesn't take any action on current or noncurrent versions of objects.

https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshoot-lifecycle.html#troubleshoot-lifecycle-failures

レプリケーション失敗の原因となるIAMロールや設定を修正した後は、S3 Batch Replicationなどを使ってFAILEDオブジェクトをリトライする必要があります。FAILEDステータスのオブジェクトは自動リトライされないため、IAMロールなどの修正が終わった後は手動での再レプリケーションが必要です。レプリケーションが成功した時点でライフサイクルアクションが自動的に再開され、設定ルールに従った処理が行われます。

However, objects that already have FAILED replication status will not automatically retry—you must use S3 Batch Replication to replicate them, or delete them using S3 Batch Operations with AWS Lambda if no longer needed.

https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-and-other-bucket-config.html#lifecycle-and-replication

やってみた

ということで、実際にS3ライフサイクルとS3レプリケーションを設定した環境を作り、レプリケーション失敗時の挙動を確認してみます。今回はap-northeast-1(東京リージョン)で実施します。

まずは、AWSコンソールでS3のソースバケットとレプリケーション先バケットを作成します。

検証用のS3バケットを作成

ソースバケットには、1日後にオブジェクトを期限切れにするライフサイクルルールと、レプリケーション先バケットへのレプリケーション設定が含まれています。

1日後にオブジェクトを期限切れにするライフサイクルルール

レプリケーション先バケットへのレプリケーション設定

レプリケーションが正常に機能しているか確認します。ソースバケットにテストオブジェクト1をアップロードしてみます。

テストオブジェクトをS3にアップロード

少し待ってから、レプリケーション先S3バケットを確認してみると、正常にレプリケーションされています。

レプリケートされたs3オブジェクト

次に、レプリケーション先バケットのバージョニングを無効化してみます。

レプリケーション先バケットバージョニングを無効化.png

この状態で新しくテストオブジェクト2をアップロードします。

ソースS3バケットに新しいオブジェクトをアップロード.png

少し待ってから、新しいオブジェクトのレプリケーション状態を確認すると、FAILEDが記録されているのが確認できます。

レプリケーションを意図的に失敗させる

ソースバケットには1日後にオブジェクトを削除するライフサイクルルールが設定されていますが、レプリケーションステータスがFAILEDのため、明日になってもライフサイクルルールによる削除は行われません。

ーー 4日後 ーー

実際に4日経った後のソースバケットを見てみると、レプリケーションが成功していたテストオブジェクト1は削除されていましたが、テストオブジェクト2は削除されていませんでした。さきほどの画像で「有効期限日」が2026/04/15 09:00:00 AM JSTになっていたテストオブジェクト2ですが、ステータスはFAILEDなので削除が実行されないという挙動が確認できます。

レプリケーションがFAILEDになっていたテストオブジェクト2は削除されていなかった

まとめ

S3のライフサイクルルールがレプリケーションFAILEDPENDINGのオブジェクトのExpiration・Transitionアクションを自動で一時停止するようになりました。

設定ミスでレプリケーションが失敗してもソースオブジェクトが守られるため、設定ミスによるデータ消去を防げます。一方でFAILEDのままだとストレージコストが増え続けるため、CloudWatchやS3 Event Notificationsなど何かしらの通知設定を入れておくとよさそうです。では!

この記事をシェアする

関連記事