

# Amazon S3 ライフサイクル問題のトラブルシューティング
<a name="troubleshoot-lifecycle"></a>

以下の情報は、Amazon S3 ライフサイクル問題のトラブルシューティングに役立ちます。

**Topics**
+ [バケットでリストオペレーションを実行したところ、有効期限が切れているか、ライフサイクルルールによって移行されたと思われるオブジェクトが表示されました。](#troubleshoot-lifecycle-1)
+ [ライフサイクルルールによって実行されたアクションをモニタリングするにはどうすればよいですか？](#troubleshoot-lifecycle-2)
+ [バージョニング対応のバケットにライフサイクルルールを設定したにもかかわらず、S3 オブジェクトの数が増え続けています。](#troubleshoot-lifecycle-3)
+ [ライフサイクルルールを使用して S3 バケットを空にするにはどうすればよいですか?](#troubleshoot-lifecycle-4)
+ [オブジェクトを低コストのストレージクラスに移行した後、Amazon S3 の請求額が増加しました。](#troubleshoot-lifecycle-5)
+ [バケットポリシーを更新しましたが、S3 オブジェクトが期限切れのライフサイクルルールによってまだ削除されたままです。](#troubleshoot-lifecycle-6)
+ [S3 ライフサイクルルールによって期限切れになった S3 オブジェクトを回復できますか?](#troubleshoot-lifecycle-7)
+ [有効期限切れと移行のライフサイクルアクションが実行されないのはなぜでしょうか。](#troubleshoot-lifecycle-failures)
+ [ライフサイクルルールからプレフィックスを除外するにはどうすればよいですか?](#troubleshoot-lifecycle-8)
+ [ライフサイクルルールに複数のプレフィックスを含めるにはどうすればよいですか?](#troubleshoot-lifecycle-9)

## バケットでリストオペレーションを実行したところ、有効期限が切れているか、ライフサイクルルールによって移行されたと思われるオブジェクトが表示されました。
<a name="troubleshoot-lifecycle-1"></a>

S3 ライフサイクル[オブジェクトの移行](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html)と[オブジェクトの有効期限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-expire-general-considerations.html)は非同期リストオペレーションです。そのため、オブジェクトが期限切れまたは移行の対象となる時点と、実際に移行または期限切れになるまでに遅延が生じる可能性があります。請求の変更は、アクションが完了していなくても、ライフサイクル ルールが満たされるとすぐに適用されます。この動作の例外は、ライフサイクルルールが S3 Intelligent-Tiering ストレージクラスに移行するように設定されている場合です。オブジェクトが S3 Intelligent-Tiering に移行するまで、請求の変更は行われません。請求の変更の詳細については、「[バケットのライフサイクル設定を設定する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)」を参照してください。

**注記**  
Amazon S3 は、128 KB 未満のオブジェクトを S3 標準または S3 標準 - IA ストレージクラスから S3 Intelligent-Tiering、S3 標準 - IA、または S3 1 ゾーン - IA ストレージクラスに移行しません。

## ライフサイクルルールによって実行されたアクションをモニタリングするにはどうすればよいですか？
<a name="troubleshoot-lifecycle-2"></a>

ライフサイクルルールによって実行されたアクションをモニタリングするには、以下の機能を使用します。
+ **S3 イベント通知** - S3 ライフサイクルの有効期限や移行イベントが通知されるように [S3 イベント通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configure-notification.html)を設定できます。
+ **S3 サーバーアクセスログ** - S3 バケットのサーバーアクセスログを有効にして、別のストレージクラスへのオブジェクトの移行やオブジェクトの失効など、S3 ライフサイクル関連のアクションをキャプチャできます。詳細については、「[ライフサイクルおよびログ記録](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-and-other-bucket-config.html#lifecycle-general-considerations-logging)」を参照してください。

ライフサイクルアクションによるストレージの変更を毎日確認するには、Amazon CloudWatch メトリクスを使用する代わりに [S3 Storage Lens ダッシュボード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_basics_metrics_recommendations.html#storage_lens_basics_dashboards)を使用することをお勧めします。Storage Lens ダッシュボードでは、オブジェクト数またはサイズをモニタリングする以下のメトリクスを表示できます。
+ **現行バージョンのバイト数**
+ **現行バージョンのオブジェクト数**
+ **旧バージョンのバイト数**
+ **旧バージョンのオブジェクト数**
+ **削除マーカーのオブジェクト数**
+ **削除マーカーのストレージバイト数**
+ **不完全なマルチパートアップロードのバイト数**
+ **不完全なマルチパートアップロードのオブジェクト数**

## バージョニング対応のバケットにライフサイクルルールを設定したにもかかわらず、S3 オブジェクトの数が増え続けています。
<a name="troubleshoot-lifecycle-3"></a>

[バージョニングが有効なバケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html#versioning-states)では、オブジェクトの有効期限が切れた場合でも、オブジェクトはバケットから完全には削除されません。代わりに、オブジェクトの最新バージョンとして[削除マーカー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html)が作成されます。削除マーカーは引き続きオブジェクトとしてカウントされます。したがって、現在のバージョンのみを期限切れにするライフサイクルルールを作成した場合、S3 バケット内のオブジェクト数は減少するのではなく実際に増加します。

例えば、S3 バケットで 100 個のオブジェクトでバージョニングが有効になっていて、そのオブジェクトの現在のバージョンが 7 日後に期限切れになるようにライフサイクルルールが設定されているとします。7 日目以降は、元のオブジェクト 100 個 に加え、非現行バージョンとなる削除マーカーが 100 個作成されるため、オブジェクト数は 200 個に増加します。バージョニングが有効なバケットの S3 ライフサイクル設定ルールアクションの詳細については、「[バケットのライフサイクル設定を設定する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)」を参照してください。

オブジェクトを完全に削除するには、ライフサイクル設定を追加して、以前のバージョンのオブジェクト、期限切れの削除マーカー、および不完全なマルチパートアップロードを削除します。新しいライフサイクルルールを作成する方法については、「[バケットにライフサイクル設定を設定する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)」を参照してください。

**注記**  
Amazon S3 は、オブジェクトの移行日または有効期限を翌日の午前 0 時 (UTC) に丸めます。  
ライフサイクルアクションのオブジェクトを評価する場合、Amazon S3 は UTC でのオブジェクトの作成時間を使用します。例えば、バージョン管理されていないバケットで、1 日後にオブジェクトを期限切れにするように設定されたライフサイクルルールがあるとします。オブジェクトが 1 月 1 日 17:05 太平洋夏時間 (PDT) に作成されたとします。これは UTC では 1 月 2 日 00:05 になります。オブジェクトは 1 月 3 日の 00:05 UTC に 1 日経過し、S3 ライフサイクルが 1 月 4 日の 00:00 UTC にオブジェクトを評価すると、オブジェクトは有効期限の対象となります。  
Amazon S3 ライフサイクルアクションは非同期で実行されるため、ライフサイクルルールで指定された日付とオブジェクトの実際の物理的な移行の間に多少の遅延が生じる場合があります。詳細については、「[移行または有効期限の遅延](how-to-set-lifecycle-configuration-intro.md#lifecycle-action-delay)」を参照してください。  
詳細については、「[ライフサイクルルール: オブジェクトの存在時間に基づく](https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-number-of-days)」を参照してください。
オブジェクトロックで保護されている S3 オブジェクトの場合、現在のバージョンは完全には削除されません。代わりに、削除マーカーがオブジェクトに追加され、オブジェクトは最新ではなくなります。その後、最新でないバージョンは保存され、永久に期限切れになることはありません。

## ライフサイクルルールを使用して S3 バケットを空にするにはどうすればよいですか?
<a name="troubleshoot-lifecycle-4"></a>

S3 ライフサイクルルールは、何百万ものオブジェクトがある [S3 バケットを空にする](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)効果的なツールです。S3 バケットから多数のオブジェクトを削除するには、必ず次の 2 組のライフサイクルルールを使用してください。
+ **現在のバージョンのオブジェクトを期限切れにし**、**以前のバージョンのオブジェクトを完全に削除する**
+ **期限切れの削除マーカーを削除し**、**未完了のマルチパートアップロードを削除する**

ライフサイクル設定ルールを作成する手順については、「[バケットにライフサイクル設定を設定する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)」を参照してください。

**注記**  
オブジェクトロックで保護されている S3 オブジェクトの場合、現在のバージョンは完全には削除されません。代わりに、削除マーカーがオブジェクトに追加され、オブジェクトは最新ではなくなります。その後、最新でないバージョンは保存され、永久に期限切れになることはありません。

## オブジェクトを低コストのストレージクラスに移行した後、Amazon S3 の請求額が増加しました。
<a name="troubleshoot-lifecycle-5"></a>

オブジェクトを低コストのストレージクラスに移行した後に請求額が増加する理由はいくつかあります。
+ 小さなオブジェクトの S3 Glacier オーバーヘッド料金

  S3 Glacier Flexible Retrieval または S3 Glacier Deep Archive に移行した各オブジェクトについて、このストレージ更新に関連する合計 40 KB のオーバーヘッドが発生します。40 KB のオーバーヘッドの一部として、8 KB がメタデータとオブジェクト名の保存に使用されます。この 8 KB は S3 標準料金に従って請求されます。残りの 32 KB はインデックス作成と関連メタデータに使用されます。この 32 KB は、Glacier Flexible Retrieval または S3 Glacier Deep Archive の料金に従って請求されます。

  そのため、小さいサイズのオブジェクトを多数保存する場合は、ライフサイクル移行の使用はお勧めしません。オーバーヘッド料金を削減するには、Amazon S3 に保存する前に、多数の小さなオブジェクトを少数の大きなオブジェクトに集約することを検討してください。コストに関する考慮事項の詳細については、[「S3 Glacier Flexible Retrieval と S3 Glacier Deep Archive ストレージクラスへの移行 (オブジェクトのアーカイブ)」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html#before-deciding-to-archive-objects)を参照してください。
+ 最小ストレージ料金

  一部の S3 ストレージクラスには、最小ストレージ期間要件があります。最小期間が満たされる前にそれらのクラスから削除、上書き、または移行されたオブジェクトには、日割り計算による早期移行料金または削除料金が請求されます。これらの最小ストレージ期間要件は次のとおりです。
  + S3 標準 - IA および S3 1 ゾーン - IA - IA - 30 日
  + S3 Glacier Flexible Retrieval および S3 Glacier Instant Retrieval – 90 日
  + S3 Glacier Deep Archive – 180 日

  これらの要件の詳細については、[S3 ライフサイクルを使用したオブジェクトの移行](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html)の「*制約*」セクションを参照してください。一般的な S3 料金情報については、「[Amazon S3 の料金表](https://aws.amazon.com/s3/pricing/)」と「[AWS料金計算ツール](https://calculator.aws/#/addService/S3)」を参照してください。
+ ライフサイクル移行料金

  オブジェクトがライフサイクルルールによって別のストレージクラスに移行されるたびに、Amazon S3 はその移行を 1 つの移行リクエストとしてカウントします。これらの移行リクエストの料金は、これらのストレージクラスの料金に追加されます。多数のオブジェクトを移行する場合は、下位の階層に移行するときに、リクエストの料金を考慮してください。詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

## バケットポリシーを更新しましたが、S3 オブジェクトが期限切れのライフサイクルルールによってまだ削除されたままです。
<a name="troubleshoot-lifecycle-6"></a>

バケットポリシーの `Deny` ステートメントは、ライフサイクルルールで定義されているオブジェクトの有効期限を妨げません。ライフサイクルアクション (移行や有効期限など) は S3 `DeleteObject` オペレーションを使用しません。代わりに、S3 ライフサイクルアクションは内部の S3 エンドポイントを使用して実行されます。(詳細については、「[ライフサイクルおよびログ記録](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-and-other-bucket-config.html#lifecycle-general-considerations-logging)」を参照してください) 

ライフサイクルルールでアクションが実行されないようにするには、ルールを編集、削除、または[無効にする必要があります](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html#lifecycle-config-conceptual-ex2)。

## S3 ライフサイクルルールによって期限切れになった S3 オブジェクトを回復できますか?
<a name="troubleshoot-lifecycle-7"></a>

S3 ライフサイクルによって期限切れになったオブジェクトを回復する唯一の方法は、バージョニングを使用することです。バージョニングは、オブジェクトが期限切れの対象となる前に実施する必要があります。ライフサイクルルールによって実行された有効期限オペレーションは元に戻せません。適用されている S3 ライフサイクルルールによってオブジェクトが完全に削除された場合、それらのオブジェクトを復元することはできません。バケットのバージョニングを有効にするには、「[S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md)」を参照してください。

バケットにバージョニングを適用しても、オブジェクトの最新バージョンがそのまま残っている場合は、[期限切れのオブジェクトの以前のバージョンを復元](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RestoringPreviousVersions.html)できます。S3 ライフサイクルルールアクションの動作とバージョニングステータスの詳細については、「[ライフサイクルアクションを記述する要素](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#non-current-days-calculations)」の「*ライフサイクルのアクションとバケットのバージョニング状態*」テーブルを参照してください。

**注記**  
S3 バケットが [AWS バックアップ](https://docs.aws.amazon.com/aws-backup/latest/devguide/s3-backups.html) または [S3 レプリケーション](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html)によって保護されている場合、これらの機能を使用して期限切れのオブジェクトを回復できる場合もあります。

## 有効期限切れと移行のライフサイクルアクションが実行されないのはなぜでしょうか。
<a name="troubleshoot-lifecycle-failures"></a>

バージョニングが有効であるか一時停止されているバケットの場合、Amazon S3 が Expiration アクションをどのように処理するかは、次の点を考慮すると理解しやすくなります。
+ オブジェクトの有効期限は、オブジェクトの最新のバージョンにのみ適用されます(最新以外のバージョンには影響しません)。
+ 1 つ以上のオブジェクトバージョンがあり、削除マーカーが最新バージョンである場合、Amazon S3 はアクションを実行しません。
+ Amazon S3 は、S3 Object Lock が適用されているオブジェクトの非現行バージョンに対して、何もアクションを実行しません。
+ レプリケーションステータスが `PENDING` または `FAILED` のオブジェクトの場合、オブジェクトの現在のバージョンまたは以前のバージョンに対して Amazon S3 はアクションを実行しません。

ライフサイクルストレージクラス移行には、次の制約があります。
+ デフォルトでは、128 KB 未満のオブジェクトはどのストレージクラスにも移行されません。
+ オブジェクトは S3 Standard-IA または S3 One Zone-IA に移行される前に、30 日間以上保存されている必要があります。
+ バージョニングが有効であるか一時停止されているバケットの場合、レプリケーションステータスが `PENDING` または `FAILED` のオブジェクトは移行できません。

## ライフサイクルルールからプレフィックスを除外するにはどうすればよいですか?
<a name="troubleshoot-lifecycle-8"></a>

S3 ライフサイクルでは、ルール内のプレフィックスを除外することはサポートされていません。代わりに、タグを使用して、ルールに含めるすべてのオブジェクトにタグ付けします。ライフサイクルルールでのタグの使用については、「[作成後 1 日以内にすべてのオブジェクトをアーカイブする](lifecycle-configuration-examples.md#lifecycle-config-ex1)」を参照してください。

## ライフサイクルルールに複数のプレフィックスを含めるにはどうすればよいですか?
<a name="troubleshoot-lifecycle-9"></a>

S3 ライフサイクルでは、ルールに複数のプレフィックスを含めることはサポートされていません。代わりに、タグを使用して、ルールに含めるすべてのオブジェクトにタグ付けします。ライフサイクルルールでのタグの使用については、「[作成後 1 日以内にすべてのオブジェクトをアーカイブする](lifecycle-configuration-examples.md#lifecycle-config-ex1)」を参照してください。

ただし、同じ文字で始まるプレフィックスが 1 つ以上ある場合は、末尾のスラッシュ (`/`) を除外した部分的なプレフィックスをフィルターで指定することで、これらのプレフィックスをすべてルールに含めることができます。例えば、次のようなプレフィックスがあるとします。

```
sales1999/
sales2000/
sales2001/
```

ルールに 3 つのプレフィックスをすべて含めるには、ライフサイクルルールで `<Prefix>sales</Prefix>` を指定します。