SAABlog
Cost ManagementIntermediate

S3 Lifecycle Policies: Automate Storage Cost Optimization

Use S3 Lifecycle policies to automatically transition objects to cheaper storage classes or delete them. Master this essential SAA-C03 topic for cost optimization.

PHILOLAMB-Updated: January 31, 2026
S3LifecycleCost OptimizationStorage ClassesAutomation

Related Exam Domains

  • Domain 4: Design Cost-Optimized Architectures

Key Takeaway

S3 Lifecycle policies automatically transition objects to cheaper storage classes or delete them to optimize storage costs. Use Lifecycle for predictable access patterns; use Intelligent-Tiering for unpredictable patterns.

Exam Tip

Exam Essential: Lifecycle = predictable patterns + auto transition/deletion. Intelligent-Tiering = unpredictable patterns + auto tiering.

What is S3 Lifecycle?

S3 Lifecycle automates storage actions throughout an object's lifetime. Transition to cheaper storage classes or delete objects after specified periods.

Lifecycle Policy Example (Log Files):

Created → 30 days → 90 days → 365 days
   │         │         │          │
   ↓         ↓         ↓          ↓
Standard  Standard-IA  Glacier   Delete
($0.023)  ($0.0125)   ($0.004)
   │         │          │
   └─────────┴──────────┴── Cost Savings

Lifecycle Action Types

1. Transition Actions

Automatically move objects to different storage classes.

Transition Paths (Waterfall Model):

Standard
    ↓
Standard-IA ←→ Intelligent-Tiering
    ↓                ↓
One Zone-IA    Glacier Instant Retrieval
    ↓                ↓
Glacier Flexible Retrieval
    ↓
Glacier Deep Archive

2. Expiration Actions

Automatically delete objects.

Expiration TypeDescription
Current version expirationDelete object (non-versioned) or add delete marker (versioned)
Noncurrent version deletionDelete previous versions of versioned objects
Delete marker cleanupRemove expired delete markers
Incomplete multipart cleanupClean up incomplete multipart uploads

Storage Class Transition Rules

Transition Constraints

1. Minimum Storage Duration

Each storage class has a minimum storage period. Transitioning earlier still charges for the minimum period.

Storage ClassMinimum Duration
StandardNone
Standard-IA30 days
One Zone-IA30 days
Glacier Instant Retrieval90 days
Glacier Flexible Retrieval90 days
Glacier Deep Archive180 days
Incorrect Configuration:

Standard → (5 days) → Glacier Instant Retrieval → (10 days) → Deep Archive
                              ↑
                         Minimum 90 days required!

Correct Configuration:
Standard → (5 days) → Glacier Instant Retrieval → (95 days) → Deep Archive
                              │                        │
                              └── 90 days minimum ─────┘

2. Minimum Object Size

Objects smaller than 128KB are not transitioned to Standard-IA, One Zone-IA, or Glacier classes by default. Transition costs may exceed storage savings.

3. Transition Direction

Once transitioned, objects cannot be moved back to more expensive classes via Lifecycle. Copy and delete to manually move.

Exam Tip

Exam Point: Violating minimum storage duration still charges the full minimum period. Delete from Glacier Instant Retrieval after 30 days = still pay for 90 days!

Lifecycle Policy Design

Policy Components

{
  "Rules": [
    {
      "ID": "Log Archiving Rule",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "logs/"
      },
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD_IA"
        },
        {
          "Days": 90,
          "StorageClass": "GLACIER"
        }
      ],
      "Expiration": {
        "Days": 365
      }
    }
  ]
}

Filter Options

FilterDescriptionExample
PrefixFilter by prefixlogs/, backup/
TagFilter by tagEnvironment: Production
Object SizeFilter by sizeTransition only 128KB+
AndCombine conditionsPrefix + Tag

Use Case Examples

Case 1: Log File Management

Requirements:
- Recent logs need fast access
- Rarely accessed after 30 days
- Archive for compliance after 1 year
- Delete after 7 years

Policy Design:
┌─────────────────────────────────────────────────────────┐
│ Period       │ Storage Class              │ Reason      │
├─────────────┼─────────────────────────────┼─────────────┤
│ 0-30 days   │ Standard                   │ Active use  │
│ 30-90 days  │ Standard-IA                │ Rare access │
│ 90-365 days │ Glacier Instant Retrieval  │ Occasional  │
│ 365-2555 d  │ Glacier Deep Archive       │ Compliance  │
│ After 2555d │ Delete                     │ Retention   │
└─────────────────────────────────────────────────────────┘

Case 2: Versioned Bucket Management

Requirements:
- Current version: Keep long-term
- Previous versions: Delete after 30 days
- Delete markers: Auto cleanup

Policy:
{
  "NoncurrentVersionTransitions": [
    {"NoncurrentDays": 30, "StorageClass": "GLACIER"}
  ],
  "NoncurrentVersionExpiration": {
    "NoncurrentDays": 90
  },
  "ExpiredObjectDeleteMarker": true
}

Lifecycle vs Intelligent-Tiering

When to Use Which?

ConditionChoice
Access pattern is predictableLifecycle policies
Access pattern is unpredictableIntelligent-Tiering
Compliance requires specific retentionLifecycle policies
Auto-deletion requiredLifecycle policies
Minimize monitoring/transition costsLifecycle policies

Cost Comparison

Intelligent-Tiering:
├── Monitoring cost: $0.0025/1,000 objects/month
├── Auto tiering: Standard → IA (30 days), Archive (90 days)
└── Transition cost: None

Lifecycle Policies:
├── Monitoring cost: None
├── Manual rule configuration required
└── Transition cost: Per-request charges

Exam Tip

Exam Point: Unknown or variable access patterns → Intelligent-Tiering. Clear patterns → Lifecycle policies

Transition Cost Considerations

Transition Request Costs

Each object transition incurs request costs:

Transition TargetCost per 1,000 requests
Standard-IA$0.01
One Zone-IA$0.01
Glacier Instant$0.02
Glacier Flexible$0.03
Glacier Deep Archive$0.05

Small Object Warning

Transition Break-even for <128KB Objects:

Object size: 10KB
Standard monthly: $0.023 × 0.01 = $0.00023
Standard-IA monthly: $0.0125 × 0.128 = $0.0016 (128KB minimum charge)
Transition cost: $0.01/1000 = $0.00001

→ Standard-IA is MORE expensive! (128KB minimum billing)

Exam Tip

Exam Point: Objects smaller than 128KB are excluded from IA/Glacier transitions by default. Many small objects may increase costs with Lifecycle transitions.

Best Practices

1. Staged Transitions

Recommended: Standard → Standard-IA → Glacier
Not ideal: Standard → Glacier (direct)

Reasons:
- Lower retrieval costs for unexpected access
- Step-by-step validation

2. Tag-Based Classification

Apply tags at upload:
- DataType: logs, media, backup
- Retention: 30d, 90d, 1y, 7y

Create rules per tag:
- Retention: 30d → Delete after 30 days
- Retention: 7y → Deep Archive after 365 days

3. Incomplete Multipart Cleanup

Always include this rule:

"AbortIncompleteMultipartUpload": {
  "DaysAfterInitiation": 7
}

Reason: Incomplete multiparts are invisible but incur costs

SAA-C03 Exam Focus Points

  1. Transition actions: Auto-move to cheaper classes
  2. Expiration actions: Auto-delete objects, cleanup delete markers
  3. Minimum storage: IA 30 days, Glacier Instant 90 days, Deep Archive 180 days
  4. 128KB limit: Small objects excluded from IA/Glacier (default)
  5. Lifecycle vs Intelligent-Tiering: Predictable vs unpredictable patterns
  6. Cost priority: Multiple rules → most cost-effective action wins

Exam Tip

Sample Exam Question: "A company wants to reduce storage costs for S3 objects not accessed for 90+ days. Objects must be retrievable immediately when needed. What is the most cost-effective solution?" → Answer: Lifecycle policy to transition to Glacier Instant Retrieval (instant retrieval + low cost)

Frequently Asked Questions

Q: When do Lifecycle policies run?

Evaluated daily at UTC 00:00. Exact execution time not guaranteed; may take up to 48 hours after rule creation for first run. Large object counts may take time to complete.

Q: Can I transition objects back to Standard?

Not via Lifecycle. Cannot directly transition from Glacier to Standard. Must restore (Restore) then copy as new object and delete original.

Q: How does Lifecycle work with versioned buckets?

Manages current and noncurrent versions separately. Transitions apply to current versions; NoncurrentVersionTransitions apply to previous versions. Use ExpiredObjectDeleteMarker to clean up delete markers.

Q: What happens if I delete before minimum storage duration?

Charged for the minimum period. Delete from Glacier Instant Retrieval after 10 days = still pay 90 days of storage.

Q: Can I use Lifecycle with Intelligent-Tiering together?

Yes. Create Lifecycle rules to transition from Standard to Intelligent-Tiering. IT then auto-tiers based on access patterns.

References