A team stores application logs in an S3 bucket. They keep logs for 18 months for compliance. Access patterns: logs are heavily accessed during the first 30 days, rarely accessed between days 31 and 180, and almost never accessed after day 180. They currently store everything in S3 Standard and want to reduce storage cost without violating the 18-month retention requirement. What should they implement?
Trap 1: Leave logs in S3 Standard for 18 months and add a tag for internal…
Adding a tag is purely for metadata, reporting, and cost allocation; it does not change the underlying S3 storage class, so the logs still incur the full S3 Standard rate for all 18 months. Since application logs are rarely read after the first few weeks, keeping them in the most expensive storage class is wasteful. A lifecycle policy that moves cold logs to Standard-IA and then Deep Archive would achieve the same retention at a fraction of the cost.
Trap 2: Immediately move all logs to Glacier Instant Retrieval and expire…
Moving every log to Glacier Instant Retrieval immediately is problematic because it does not distinguish between hot logs from the recent 30 days and older, colder logs. Glacier Instant Retrieval offers millisecond retrieval but is designed for long-lived data that is rarely accessed, and its retrieval per-GB fee makes it more expensive than Standard-IA for the frequent reads of recent logs. It also has a 90-day minimum storage duration, so moving 30-day-old logs in and then expiring them at 18 months is fine, but the immediate transition fails to optimize for the high first-30-day access pattern.
Trap 3: Enable versioning and rely on object lifecycle expiration to reduce…
Enabling versioning creates multiple copies of each object every time it is overwritten, which can increase storage costs rather than reduce them; lifecycle expiration simply deletes noncurrent versions after a set period, but the current versions of the logs remain in S3 Standard. Expiration alone does not transition data to a cheaper storage class, so you still pay the highest per-GB price for the entire 18-month retention period. Versioning is useful for protecting against accidental deletion, but it is not a cost optimization mechanism and sidesteps the real issue of selecting an appropriate storage class.
- A
Leave logs in S3 Standard for 18 months and add a tag for internal reporting
Why it fails: Adding a tag is purely for metadata, reporting, and cost allocation; it does not change the underlying S3 storage class, so the logs still incur the full S3 Standard rate for all 18 months. Since application logs are rarely read after the first few weeks, keeping them in the most expensive storage class is wasteful. A lifecycle policy that moves cold logs to Standard-IA and then Deep Archive would achieve the same retention at a fraction of the cost.
- B
Create an S3 lifecycle policy to transition logs to Standard-IA after 30 days and to Glacier Deep Archive after 180 days
This is correct because it matches storage cost to actual access frequency: logs are typically accessed heavily in the first 30 days, so S3 Standard is appropriate, after which Standard-IA reduces storage cost while still allowing rapid access. At 180 days, the logs are unlikely to be needed for active operations, so Glacier Deep Archive provides the lowest-cost storage while still satisfying the 18-month retention requirement. The lifecycle transitions honor S3's minimum storage duration constraints (30 days and 180 days), so no early-deletion fees are incurred.
- C
Immediately move all logs to Glacier Instant Retrieval and expire after 18 months
Why it fails: Moving every log to Glacier Instant Retrieval immediately is problematic because it does not distinguish between hot logs from the recent 30 days and older, colder logs. Glacier Instant Retrieval offers millisecond retrieval but is designed for long-lived data that is rarely accessed, and its retrieval per-GB fee makes it more expensive than Standard-IA for the frequent reads of recent logs. It also has a 90-day minimum storage duration, so moving 30-day-old logs in and then expiring them at 18 months is fine, but the immediate transition fails to optimize for the high first-30-day access pattern.
- D
Enable versioning and rely on object lifecycle expiration to reduce costs; do not change storage classes
Why it fails: Enabling versioning creates multiple copies of each object every time it is overwritten, which can increase storage costs rather than reduce them; lifecycle expiration simply deletes noncurrent versions after a set period, but the current versions of the logs remain in S3 Standard. Expiration alone does not transition data to a cheaper storage class, so you still pay the highest per-GB price for the entire 18-month retention period. Versioning is useful for protecting against accidental deletion, but it is not a cost optimization mechanism and sidesteps the real issue of selecting an appropriate storage class.