소개
팀은 임시 내보내기를 90일 동안 보관하지만 같은 버킷의 영구 기록은 해당 정책에서 제외해야 합니다. 범위가 제한된 수명 주기 규칙을 설정하고 확인한 뒤 연습용 리소스를 정리합니다.
먼저 키와 메타데이터로 문서 정리하기에서 접두사, 속성, 다운로드, 정리를 익히세요. 새 VM에 CLI 연결, 버킷, 내보내기, 영구 기록이 준비되어 있습니다. Terminal과 옆의 AWS View 탭을 사용하세요. 미래의 객체 나이에 따른 작업을 기다리는 대신 저장된 설정을 확인합니다.
인증 시험 관련 주제
이 실습은 다음 시험 주제에 대한 실습 경험을 제공합니다.
- Cloud Practitioner (CLF-C02) · 태스크 3.6: S3 스토리지 클래스와 범위를 지정한 수명 주기 설정.
- Solutions Architect – Associate (SAA-C03) · 태스크 4.1: S3 스토리지 클래스와 범위를 지정한 수명 주기 설정.
- Developer – Associate (DVA-C02) · 태스크 1.3: S3 스토리지 클래스와 범위를 지정한 수명 주기 설정.
- CloudOps Engineer – Associate (SOA-C03) · 태스크 1.3: S3 스토리지 클래스와 범위를 지정한 수명 주기 설정.
- Security – Specialty (SCS-C03) · 태스크 5.2: 기초 실습: S3 스토리지 클래스와 범위를 지정한 수명 주기 설정.
- Data Engineer – Associate (DEA-C01) · 태스크 2.3: 기초 실습: S3 스토리지 클래스와 범위를 지정한 수명 주기 설정.
임시 데이터와 영구 데이터 확인하기
이 단계에서는 정책의 의도된 범위를 식별하고 제외해야 할 영구 기록을 확인합니다.
**수명 주기 규칙(lifecycle rule)**은 관리할 객체와 객체가 오래되었을 때 수행할 작업을 지정합니다. **전환(transition)**은 스토리지 클래스를 변경하고 **만료(expiration)**는 조건에 해당하는 저장된 객체를 삭제합니다. 어느 작업도 로컬 파일을 변경하지 않습니다. 먼저 이 규칙에 속할 저장된 키를 식별하세요.
디렉터리를 변경하는 cd로 작업 공간에 들어가세요.
cd /home/labex/project
접두사를 포함한 완전한 객체 키를 볼 수 있도록 준비된 버킷을 재귀적으로 나열하세요.
aws s3 ls s3://labex-export-retention/ --recursive
exports/monthly.csv와 records/retention-policy.txt라는 키 두 개가 있습니다. 내보내기는 128 KB보다 크고 영구 기록은 작은 텍스트 파일입니다. 접두사는 실제 디렉터리가 아닌 객체 키의 시작 부분입니다. exports/로 필터링된 규칙은 내보내기와 일치하지만 records/retention-policy.txt는 제외합니다.
cp로 영구 기록을 다운로드한 뒤 cat으로 바이트를 확인하세요.
aws s3 cp s3://labex-export-retention/records/retention-policy.txt permanent-record.txt
cat permanent-record.txt
Permanent record: retain until approved removal.
AWS View에서 records/retention-policy.txt를 펼쳐 같은 저장된 텍스트를 확인하세요. 규칙을 설정한 뒤 이 기록을 비교합니다. 같은 버킷을 공유한다는 이유만으로 수명 주기 정책이 관련 없는 데이터를 실수로 만료시켜서는 안 됩니다.
범위가 제한된 수명 주기 규칙 작성하고 적용하기
이 단계에서는 팀의 보관 요구 사항을 설명하는 수명 주기 규칙 하나를 저장합니다.
S3 Standard는 자주 접근하는 데이터의 기본 클래스입니다. S3 Standard-IA(자주 접근하지 않는 데이터)는 즉시 검색 기능을 유지하지만 검색에 비용이 들고 최소 저장 기간은 30일입니다. 여기서는 내보내기에 대한 접근 빈도가 30일 후 낮아지고 90일까지 보관하므로 Standard-IA에서 60일을 보냅니다. 기본 수명 주기 동작에서는 128 KB보다 작은 객체가 전환되지 않습니다. 준비된 내보내기는 이 기준보다 큽니다. 이는 선택 시 고려할 사항이며 특정 비용 절감을 약속하는 것은 아닙니다.
90일 만료는 일회성 내보내기에 적합하지만 영구 기록에는 적합하지 않습니다. 이 버킷은 버전 관리가 꺼져 있으므로 만료가 해당 객체를 영구 삭제할 수 있습니다. 버전 관리 버킷에서 현재 버전 만료와 이전 버전 삭제는 효과가 다르므로 각각의 작업을 따로 고려해야 합니다.
개념도: 규칙은 exports/에 적용됩니다. 일수 기준은 적용 자격을 설명하며 정확한 순간에 실행됨을 보장하지 않습니다.

JSON은 객체({}), 배열([]), 따옴표로 감싼 필드 이름, 문자열, 숫자 일수 값으로 설정을 설명합니다. Rules 배열은 전체 버킷 정책을 담습니다. ID는 규칙에 이름을 지정하고 Status는 활성화하며 Filter.Prefix는 범위를 제한합니다. Transitions와 Expiration은 두 작업을 지정합니다.
셸의 cat > lifecycle.json <<'JSON'은 닫는 JSON까지 다음 줄을 파일에 기록합니다. 이는 히어 도큐먼트이며 따옴표로 감싼 구분자가 내용을 문자 그대로 유지합니다. 마지막 구분자를 포함하여 전체 블록을 복사하세요.
cat > lifecycle.json <<'JSON'
{
"Rules": [
{
"ID": "temporary-export-retention",
"Status": "Enabled",
"Filter": {"Prefix": "exports/"},
"Transitions": [{"Days": 30, "StorageClass": "STANDARD_IA"}],
"Expiration": {"Days": 90}
}
]
}
JSON
적용하기 전에 파일을 검토하세요.
cat lifecycle.json
접두사가 마지막 슬래시를 포함한 exports/인지 확인하세요. 빈 접두사는 영구 기록을 포함한 버킷의 모든 객체를 대상으로 합니다.
aws s3api는 개별 S3 API 작업을 제공합니다. put-bucket-lifecycle-configuration은 설정을 기록하고 --bucket은 버킷을 선택하며 file://lifecycle.json은 CLI가 로컬 파일에서 JSON 인수를 읽도록 합니다. 이 작업은 버킷의 전체 수명 주기 설정을 교체합니다. 기존 설정을 업데이트할 때는 유지하려는 규칙을 모두 포함하세요. 이 연습은 기존 설정 없이 시작합니다.
aws s3api put-bucket-lifecycle-configuration --bucket labex-export-retention --lifecycle-configuration file://lifecycle.json
성공한 명령은 응답 본문을 출력하지 않습니다. 다음에는 로컬 파일에만 의존하지 않고 서비스가 실제로 저장한 것을 확인합니다.
저장된 정책과 영향받지 않은 기록 검토하기
이 단계에서는 S3에서 정책을 다시 읽고 새 데이터와 제외된 영구 기록 모두에 계속 접근할 수 있는지 확인합니다.
버킷의 수명 주기 설정을 검색하세요.
aws s3api get-bucket-lifecycle-configuration --bucket labex-export-retention
응답의 Rules 배열에는 Enabled 규칙 하나가 있습니다. 접두사는 exports/, 전환은 30일에 STANDARD_IA, 만료는 90일입니다. 서비스가 추가 응답 필드를 포함할 수 있습니다. 규칙 필드를 요구 사항과 비교하세요. 이 응답은 신뢰할 수 있는 설정 증거이며 로컬 JSON 파일만으로는 규칙이 적용되었음을 보여 줄 수 없습니다.
AWS View는 객체 위에 같은 저장된 규칙을 보여 줍니다. 기준 시점이 미래이므로 완료된 전환이나 삭제는 표시하지 않습니다.

이 예시는 저장된 설정과 현재 기록 바이트를 보여 줍니다. 객체 나이에 따른 작업이 완료되었음을 나타내지는 않습니다.
head-object는 본문을 다운로드하지 않고 객체 속성을 읽습니다. 새로 생성된 내보내기를 확인하세요.
aws s3api head-object --bucket labex-export-retention --key exports/monthly.csv
ContentLength는 131072바이트보다 큽니다. 오늘은 여전히 Standard에 있으며 이 기본 클래스에는 StorageClass 필드가 생략될 수 있습니다. 규칙을 활성화했다고 해서 새 객체의 스토리지 클래스가 즉시 바뀌지는 않습니다. 예약 처리는 조건 충족 이후 비동기적으로 실행되며 이 명령 실행 시점부터 시작하는 초시계 카운트다운이 아닙니다.
제외된 영구 기록을 다시 다운로드하세요.
aws s3 cp s3://labex-export-retention/records/retention-policy.txt permanent-record-after.txt
cmp는 파일을 바이트 단위로 비교합니다. &&는 비교가 성공했을 때만 메시지를 출력합니다.
cmp permanent-record.txt permanent-record-after.txt && echo 'Permanent record unchanged'
메시지는 내용이 온전히 유지되었음을 확인합니다. 두 키 모두 여전히 버킷에 나타납니다.
aws s3 ls s3://labex-export-retention/ --recursive
저장된 접두사는 영구 기록이 규칙 범위 밖에 있음을 확인해 줍니다. 오늘 계속 존재한다는 사실은 정책 설정 중 실수로 삭제하거나 덮어쓰지 않았음도 확인하지만 그것만으로 미래 스케줄러 동작을 증명하지는 못합니다.
정책과 연습 리소스 삭제하기
이 단계에서는 미래 만료를 기다리지 않고 저장된 정책을 삭제한 뒤 실습에 속한 객체와 버킷을 삭제합니다.
수명 주기 설정을 삭제하면 해당 정책이 버킷에 적용되지 않게 되지만 그 자체로 객체가 삭제되지는 않습니다. 개별 API 작업으로 정책을 삭제하세요.
aws s3api delete-bucket-lifecycle --bucket labex-export-retention
더 이상 설정되어 있지 않은지 확인하세요.
aws s3api get-bucket-lifecycle-configuration --bucket labex-export-retention
이 명령은 예상대로 실패하며 NoSuchLifecycleConfiguration을 반환합니다. 버킷은 여전히 존재하지만 수명 주기 정책은 없습니다. AWS View는 규칙 요약을 없애고 두 객체는 유지합니다.
영구 기록은 자동 만료에서 제외되었습니다. 이제 이 일회성 연습 정리의 일부로 정확한 키를 사용하여 의도적으로 삭제합니다. 먼저 임시 내보내기를 삭제하세요.
aws s3 rm s3://labex-export-retention/exports/monthly.csv
aws s3 rm s3://labex-export-retention/records/retention-policy.txt
성공한 목록 조회에 객체 행이 없는지 확인하세요.
aws s3 ls s3://labex-export-retention/ --recursive
rb로 빈 버킷을 삭제한 뒤 스토리지가 계속 응답하는지 확인하세요.
aws s3 rb s3://labex-export-retention
aws s3 ls
remove_bucket 메시지에는 이 연습의 버킷이 표시됩니다. 최종 목록에는 버킷이 없고 AWS View에 No buckets가 표시됩니다. 로컬 정책과 기록 사본은 검토용으로 남습니다. 미래 보관 정책을 설정하고 연습용 리소스를 명시적으로 정리했습니다. 이 둘은 별개의 작업입니다.
요약
임시 데이터 요구 사항을 범위가 좁은 S3 수명 주기 규칙으로 옮겼습니다. 접근 및 최소 저장 기간을 고려하여 스토리지 클래스를 선택하고 만료를 설정했습니다. S3에서 규칙을 다시 읽고 영구 기록이 접두사 밖에 있으며 변경되지 않았음을 확인했습니다.
설정 증거는 미래의 예약 실행과 다릅니다. 객체 나이에 따른 작업을 기다리지 않고 정책과 실습에 속한 스토리지 리소스를 명시적으로 삭제하며 마쳤습니다.



