Amazon S3 Lifecycle 문제 해결

Amazon S3 Lifecycle 문제 해결

다음 정보는 Amazon S3 Lifecycle 규칙의 일반적인 문제를 해결하는 데 도움이 돼요.

출처: 문서

본문

버킷에서 목록 작업을 실행했는데 Lifecycle 규칙으로 만료되거나 전환됐을 것이라고 생각한 객체가 보여요

S3 Lifecycle 객체 전환과 객체 만료는 비동기 작업이에요. 따라서 객체가 만료나 전환 대상이 되는 시점과 실제로 전환되거나 만료되는 시점 사이에는 지연이 있을 수 있어요. 청구 변경은 작업이 완료되지 않아도 Lifecycle 규칙이 충족되는 즉시 적용돼요. 이 동작의 예외는 S3 Intelligent-Tiering 스토리지 클래스로 전환하도록 설정된 Lifecycle 규칙이 있는 경우예요. 이 경우 객체가 S3 Intelligent-Tiering으로 전환된 후에야 청구 변경이 발생해요. S3 Glacier Flexible Retrieval과 S3 Glacier Deep Archive로의 전환에는 목적지 스토리지 클래스 요율 청구, 객체당 저장 오버헤드(40KB), 최소 저장 기간 타이머가 실제 전환이 비동기로 일어나더라도 Lifecycle 규칙이 충족될 때 모두 시작돼요. 청구 변경에 대한 자세한 내용은 "버킷에 Lifecycle 구성 설정"을 참고하세요.

참고: Amazon S3는 128KB보다 작은 객체를 S3 Standard 또는 S3 Standard-IA 스토리지 클래스에서 S3 Intelligent-Tiering, S3 Standard-IA 또는 S3 One Zone-IA 스토리지 클래스로 전환하지 않아요.

내 Lifecycle 규칙이 수행한 작업을 어떻게 모니터링하나요?

Lifecycle 규칙이 수행한 작업을 모니터링하려면 다음 기능을 사용할 수 있어요.

  • S3 Event Notifications – S3 Event Notifications을 설정해 S3 Lifecycle 만료나 전환 이벤트를 알림받을 수 있어요.
  • S3 서버 접근 로그 – S3 버킷에 서버 접근 로그를 활성화해 객체의 다른 스토리지 클래스 전환, 객체 만료 같은 S3 Lifecycle 작업을 캡처할 수 있어요. 자세한 내용은 Lifecycle 및 로깅을 참고하세요.

Lifecycle 작업으로 인한 저장 공간 변화를 매일 보려면 Amazon CloudWatch 메트릭 대신 S3 Storage Lens 대시보드를 사용할 것을 권장해요. Storage Lens 대시보드에서 객체 개수나 크기를 모니터링하는 다음 메트릭을 볼 수 있어요.

  • 현재 버전 바이트(Current version bytes)
  • 현재 버전 객체 개수(Current version object count)
  • 비현재 버전 바이트(Noncurrent version bytes)
  • 비현재 버전 객체 개수(Noncurrent version object count)
  • 삭제 마커 객체 개수(Delete marker object count)
  • 삭제 마커 저장 바이트(Delete marker storage bytes)
  • 불완전한 멀티파트 업로드 바이트(Incomplete multipart upload bytes)
  • 불완전한 멀티파트 업로드 객체 개수(Incomplete multipart upload object count)

버전 관리 활성화 버킷에 Lifecycle 규칙을 설정했는데도 S3 객체 개수가 계속 늘어나요

버전 관리 활성화 버킷에서 객체가 만료되면 객체가 버킷에서 완전히 삭제되지 않아요. 대신 삭제 마커가 객체의 최신 버전으로 만들어져요. 삭제 마커도 객체로 계수돼요. 따라서 현재 버전만 만료시키는 Lifecycle 규칙을 만들면 S3 버킷의 객체 개수가 줄어들지 않고 실제로 늘어나요.

예를 들어 100개의 객체가 있는 버전 관리 활성화 S3 버킷에 7일 후 현재 버전을 만료시키는 Lifecycle 규칙이 설정돼 있다고 가정해 보세요. 7일이 지나면 원래 100개 객체에 삭제 마커 100개가 추가로 만들어지면서 객체 개수가 200으로 늘어나요(원래 객체는 이제 비현재 버전이 됨). 버전 관리 활성화 버킷에 대한 S3 Lifecycle 구성 규칙 작업에 대한 자세한 내용은 "버킷에 Lifecycle 구성 설정"을 참고하세요.

객체를 영구적으로 제거하려면 객체의 이전 버전, 만료된 삭제 마커, 불완전한 멀티파트 업로드를 삭제하는 추가 Lifecycle 구성을 설정하세요. 새 Lifecycle 규칙을 만드는 방법은 "버킷에 Lifecycle 구성 설정"을 참고하세요.

참고:

  • Amazon S3는 객체의 전환 또는 만료 날짜를 다음 날 자정(UTC)으로 올림해요.
  • Lifecycle 작업에 대한 객체 평가 시 Amazon S3는 객체 생성 시각을 UTC로 사용해요. 예를 들어 객체를 1일 후에 만료시키도록 구성된 Lifecycle 규칙이 있는 버전 관리 없는 버킷을 생각해 보세요. 객체가 1월 1일 17:05 태평양 일광 절약 시간(PDT)에 만들어졌다고 가정하면, 이는 1월 2일 00:05 UTC에 해당해요. 객체는 1월 3일 00:05 UTC에 하루가 되어, S3 Lifecycle이 1월 4일 00:00 UTC에 객체를 평가할 때 만료 대상이 돼요.
  • Amazon S3 Lifecycle 작업은 비동기적으로 발생하므로 Lifecycle 규칙에 지정된 날짜와 객체의 실제 물리적 전환 사이에는 약간의 지연이 있을 수 있어요. 자세한 내용은 "전환 또는 만료 지연"을 참고하세요.
  • Object Lock으로 보호되는 S3 객체의 경우 현재 버전은 영구 삭제되지 않아요. 대신 객체에 삭제 마커가 추가되어 비현재로 만들어져요. 비현재 버전은 보존되며 영구 만료되지 않아요.

Lifecycle 규칙으로 S3 버킷을 어떻게 비우나요?

S3 Lifecycle 규칙은 수백만 개의 객체가 있는 S3 버킷을 비우는 데 효과적인 도구예요. S3 버킷에서 많은 객체를 삭제하려면 다음 두 쌍의 Lifecycle 규칙을 사용해야 해요.

  • 현재 객체 버전 만료(Expire current versions of objects) 및 이전 객체 버전 영구 삭제(Permanently delete previous versions of objects)
  • 만료된 삭제 마커 삭제(Delete expired delete markers) 및 불완전한 멀티파트 업로드 삭제(Delete incomplete multipart uploads)

Lifecycle 구성 규칙을 만드는 방법은 "버킷에 Lifecycle 구성 설정"을 참고하세요.

참고: Object Lock으로 보호되는 S3 객체의 경우 현재 버전은 영구 삭제되지 않아요. 대신 객체에 삭제 마커가 추가되어 비현재로 만들어져요. 비현재 버전은 보존되며 영구 만료되지 않아요.

더 저렴한 스토리지 클래스로 전환했는데 Amazon S3 요금이 늘었어요

더 저렴한 스토리지 클래스로 객체를 전환한 후 요금이 늘어날 수 있는 이유는 여러 가지가 있어요.

  • 작은 객체에 대한 S3 Glacier 오버헤드 요금 — S3 Glacier Flexible Retrieval이나 S3 Glacier Deep Archive로 전환된 각 객체에는 총 40KB의 오버헤드가 이 저장 업데이트와 관련돼요. 40KB 오버헤드 중 8KB는 메타데이터와 객체 이름을 저장하는 데 사용되며, 이 8KB는 S3 Standard 요율로 청구돼요. 나머지 32KB는 인덱싱 및 관련 메타데이터에 사용되며, S3 Glacier Flexible Retrieval 또는 S3 Glacier Deep Archive 요금으로 청구돼요. 따라서 많은 작은 객체를 저장한다면 Lifecycle 전환을 권장하지 않아요. 오버헤드 요금을 줄이려면 Amazon S3에 저장하기 전에 많은 작은 객체를 적은 수의 큰 객체로 합치는 것을 고려하세요. 비용 고려 사항에 대한 자세한 내용은 "S3 Glacier Flexible Retrieval 및 S3 Glacier Deep Archive 스토리지 클래스로 전환(객체 아카이브)"을 참고하세요.
  • 최소 저장 요금 — 일부 S3 스토리지 클래스에는 최소 저장 기간 요구 사항이 있어요. 최소 기간이 충족되기 전에 해당 클래스에서 삭제, 덮어쓰기 또는 전환되는 객체는 비례 배분된 조기 전환 또는 삭제 요금이 부과돼요. 최소 저장 기간 요구 사항은 다음과 같아요.
    • S3 Standard-IA와 S3 One Zone-IA – 30일
    • S3 Glacier Flexible Retrieval과 S3 Glacier Instant Retrieval – 90일
    • S3 Glacier Deep Archive – 180일
    • 이러한 요구 사항에 대한 자세한 내용은 "Amazon S3 Lifecycle을 사용한 객체 전환"의 제약(Constraints) 섹션을 참고하세요. 일반적인 S3 요금 정보는 Amazon S3 pricing과 AWS Pricing Calculator를 참고하세요.
  • Lifecycle 전환 비용 — Lifecycle 규칙으로 객체가 다른 스토리지 클래스로 전환될 때마다 Amazon S3는 그 전환을 요청 하나로 계산해요. 전환 요청 비용은 이 스토리지 클래스 비용에 추가돼요. 많은 객체를 전환할 계획이라면 더 낮은 계층으로 전환할 때 요청 비용을 고려하세요. 자세한 내용은 Amazon S3 pricing을 참고하세요.

버킷 정책을 업데이트했는데도 S3 객체가 만료된 Lifecycle 규칙에 의해 계속 삭제돼요

버킷 정책의 Deny 문은 Lifecycle 규칙에 정의된 객체의 만료를 막지 못해요. Lifecycle 작업(전환이나 만료)은 S3 DeleteObject 작업을 사용하지 않아요. 대신 S3 Lifecycle 작업은 내부 S3 엔드포인트를 사용해 수행돼요. (자세한 내용은 Lifecycle 및 로깅을 참고하세요.)

Lifecycle 규칙이 어떤 작업도 수행하지 못하게 하려면 규칙을 편집, 삭제 또는 비활성화해야 해요.

S3 Lifecycle 규칙으로 만료된 S3 객체를 복구할 수 있나요?

S3 Lifecycle으로 만료된 객체를 복구하는 유일한 방법은 버전 관리를 통하는 것이며, 버전 관리는 객체가 만료 대상이 되기 전에 설정되어 있어야 해요. Lifecycle 규칙이 수행한 만료 작업은 되돌릴 수 없어요. 적용된 S3 Lifecycle 규칙에 의해 객체가 영구 삭제되면 복구할 수 없어요. 버킷에 버전 관리를 활성화하려면 "S3 Versioning으로 객체의 여러 버전 유지"를 참고하세요.

버킷에 버전 관리를 적용했고 객체의 비현재 버전이 여전히 온전하다면 만료된 객체의 이전 버전을 복원할 수 있어요. S3 Lifecycle 규칙 작업 및 버전 관리 상태의 동작에 대한 자세한 내용은 "Lifecycle 작업을 설명하는 요소"의 Lifecycle 작업 및 버킷 버전 관리 상태 표를 참고하세요.

참고: S3 버킷이 AWS Backup이나 S3 Replication으로 보호된다면 이 기능들로 만료된 객체를 복구할 수도 있어요.

만료 및 전환 Lifecycle 작업이 왜 발생하지 않나요?

버전 관리 활성화 또는 일시 중지 버킷에서 다음 고려 사항이 Amazon S3가 Expiration 작업을 처리하는 방식을 결정해요.

  • 객체 만료는 객체의 현재 버전에만 적용돼요(비현재 객체 버전에는 영향이 없어요).
  • 객체 버전이 하나 이상 있고 삭제 마커가 현재 버전이면 Amazon S3는 아무 작업도 하지 않아요.
  • S3 Object Lock이 적용된 객체의 비현재 버전에는 Amazon S3가 아무 작업도 하지 않아요.
  • 복제 상태가 PENDING 또는 FAILED인 객체의 현재 또는 비현재 버전에는 Amazon S3가 아무 작업도 하지 않아요.

Lifecycle 스토리지 클래스 전환에는 다음 제약이 있어요.

  • 기본적으로 128KB보다 작은 객체는 어떤 스토리지 클래스로도 전환되지 않아요.
  • 버전 관리 활성화 또는 일시 중지 버킷에서는 복제 상태가 PENDING 또는 FAILED인 객체를 전환할 수 없어요.

내 Lifecycle 규칙에서 접두사를 제외하려면 어떻게 하나요?

S3 Lifecycle은 규칙에서 접두사 제외를 지원하지 않아요. 대신 규칙에 포함하려는 모든 객체에 태그로 표시하세요. Lifecycle 규칙에서 태그 사용에 대한 자세한 내용은 "생성 후 1일 안에 모든 객체 아카이브"를 참고하세요.

내 Lifecycle 규칙에 여러 접두사를 포함하려면 어떻게 하나요?

S3 Lifecycle은 규칙에서 여러 접두사 포함을 지원하지 않아요. 대신 규칙에 포함하려는 모든 객체에 태그로 표시하세요. Lifecycle 규칙에서 태그 사용에 대한 자세한 내용은 "생성 후 1일 안에 모든 객체 아카이브"를 참고하세요.

다만 같은 문자로 시작하는 접두사가 하나 이상 있으면 필터에서 뒤에 슬래시(/)가 없는 일부 접두사를 지정해 그 모든 접두사를 규칙에 포함할 수 있어요. 예를 들어 다음과 같은 접두사가 있다고 가정해 보세요.

sales1999/
sales2000/
sales2001/

세 접두사를 모두 규칙에 포함하려면 Lifecycle 규칙에서 <Prefix>sales</Prefix>를 지정하세요.

더 알아보기 (Learn more)