13참가자 AWS 배포/예상 약 20분, 별도 일정

실습 자원 정리

참가자 자원만 식별해 정리하고 보존 데이터와 수동 DNS를 기록합니다.

참가자 AWS 배포 · 별도 트랙아직 읽지 않음

참가자 AWS 배포 트랙, 예상 약 20분입니다. CloudFront 삭제와 AWS 비동기 작업은 더 오래 걸릴 수 있습니다.

본인 참가자 스택만 정리하고, 보존되는 데이터와 수동 DNS를 따로 기록합니다. 로컬 app을 지우거나 Fargate를 중지하는 것만으로 전체 과금이 끝나지는 않습니다.

1. 내 자원 목록 먼저 저장

터미널bash
VSCode Server 터미널에서 실행
set -euo pipefail
cd "$ROBOT_REPO"
python3 workshop/scripts/lab.py info --config "$ROBOT_CONFIG"

cd "$ROBOT_LAB"
test -f infra/workshop-binding.json
umask 077
mkdir -p .local/evidence
python3 -B scripts/deploy.py status --stack app \
  > .local/evidence/app-before-cleanup.json
python3 -B scripts/deploy.py status --stack agentcore \
  > .local/evidence/agentcore-before-cleanup.json
python3 -B scripts/cleanup.py > .local/evidence/cleanup-plan.json
python3 -m json.tool .local/evidence/cleanup-plan.json

cleanup.py의 기본 실행은 조회입니다. mode: read-only, cleanupPlan의 stack·stackId·status·retainedResources를 읽습니다.

확인 진행 기준
소유권 본인 Project·DeploymentOwner 태그와 stack ID 일치
스택 본인의 App·Edge·AgentCore·Foundation만 포함
진행 상태 생성·업데이트·삭제가 진행 중이지 않음
보존 목록 버킷·테이블·ECR·비밀키·로그의 실제 식별자를 저장
공유 자원 기존 VPC·Subnet·NAT·endpoint·인증서·다른 팀 자원은 대상에 없음

목록이 비어 있으면 이전 기록과 비교해 이미 삭제했는지 확인합니다. 빈 조회 결과만으로 보존 자원까지 없다고 판단하지 않습니다. 준비된 배포기의 계정·태그 검사를 제거해 다른 스택을 포함하지 않습니다.

2. 스택 삭제 실행

실행 중 시연이 없는지 확인하고, 보관할 결과를 내려받은 뒤 다음 명령을 사용합니다. 이 명령은 AWS 자원을 실제 삭제합니다.

터미널bash
VSCode Server 터미널에서 실행
cd "$ROBOT_LAB"
set -o pipefail
python3 -B scripts/cleanup.py --execute \
  | tee .local/evidence/cleanup-execution.jsonl

삭제 순서는 App → Edge → AgentCore → Foundation입니다. 실행기는 삭제 직전에 스택의 실제 ID·소유권·진행 상태를 다시 확인합니다. cleanupPlan JSON을 수정해 임의 자원을 삭제하는 도구가 아닙니다.

CloudFront나 의존 자원 삭제가 진행 중이면 기다린 뒤 상태를 확인합니다. CLI가 중단되어도 AWS 작업은 이어질 수 있습니다. 다른 스택을 함께 지우거나 가드를 우회해 재시도하지 않습니다.

터미널bash
VSCode Server 터미널에서 실행
python3 -B scripts/deploy.py status
python3 -B scripts/cleanup.py

네 스택의 ABSENT와 기본 정리 조회의 빈 목록을 확인합니다. 이전에 저장한 cleanup-plan.json은 덮어쓰지 않고 보존 자원 검토에 사용합니다.

3. 수동 DNS 정리

DNS 관리자는 08장에서 등록한 본인 서비스 CNAME을 수동 삭제합니다. 삭제한 CloudFront로 향하는 레코드를 남겨두지 않습니다. 기존 존이나 루트 NS를 삭제·변경하지 않습니다.

ACM 인증서 검증 CNAME은 서비스 CNAME과 다릅니다. 공유 인증서의 자동 갱신에 사용될 수 있으므로 서비스 종료만으로 함께 지우지 않습니다. 이 실습 도구는 인증서를 생성하지 않았고 기존 인증서도 삭제하지 않습니다.

4. 보존 자원과 추가 비용

자원 삭제 후 확인할 내용
Replay S3 기록과 현재/이전 버전·delete marker, lifecycle, 보존 결정
정적 S3 fingerprint 자산과 과거 버전, 보존 결정
ECR immutable release 이미지·저장량, repository 보존
DynamoDB 실행 상태·TTL·백업/PITR·테이블 보존
Secrets Manager session/origin Secret 두 개의 보존·삭제 결정
ECS 로그 Retain된 정확한 로그 그룹과 보존 기간
Runtime 로그 Runtime ID로 생성된 별도 로그 그룹과 보존 기간

스택 삭제는 Retain 자원을 비우거나 삭제하지 않습니다. 저장한 inventory의 정확한 본인 자원 ID를 사용해 후속 보존/삭제를 결정합니다. 버전 관리 버킷은 현재 객체만 지워서는 비워지지 않습니다. 데이터 삭제는 복구 가능성과 보관 의무를 확인한 별도 작업으로 진행합니다.

같은 참가자 이름으로 다시 배포하면 남아 있는 named resource와 충돌할 수 있습니다. 이름 충돌을 해결하려고 다른 자원이나 공유 버킷을 지우지 않습니다. 리소스 가져오기 또는 정확한 보존 자원의 정리 계획을 따로 세웁니다.

5. 로컬 작업과 별도 GPU 트랙

참가자 API·MuJoCo·Vite는 본인이 시작한 터미널에서 Ctrl+C로 종료합니다. 공유 호스트의 다른 서비스를 이름이나 포트만으로 종료하지 않습니다. 본인 컨테이너를 사용했다면 해당 Compose 프로젝트 이름을 대조해 정리합니다. 전역 docker system prune은 사용하지 않습니다.

이 장의 정리기는 네 개의 참가자 Fargate/AgentCore 스택만 처리합니다. 별도 Isaac Sim·EKS 트랙에서 만든 GPU 작업·노드·스토리지·클러스터는 해당 트랙의 소유권과 정리 절차로 확인해야 합니다. EKS가 남아 있는데 전체 실습 비용이 종료되었다고 기록하지 않습니다.

참가자 app을 보관한다면 .env, .local, .state, 자격 증명, 세션·실행 원문을 공개 저장소나 교재 ZIP에 넣지 않습니다. 정리 근거도 참가자 전용 저장 공간에 보관합니다.

실패 시 재개

증상 확인하고 진행할 일
*_IN_PROGRESS로 정리 거부 해당 스택 작업 완료를 조회한 뒤 다시 실행
DELETE_FAILED 본인 스택 이벤트의 의존 자원·권한, 남은 정확한 ID
로컬 폴더를 지워 조회 불가 보관한 참가자 설정·바인딩·inventory 복구
동일 이름 재생성 실패 Retain된 기존 named resource 여부
스택은 없지만 비용 계속 저장소·이미지·Secret·로그·별도 GPU·수동 자원

완료 체크리스트

  • 삭제 전 stack ID와 보존 inventory를 저장했습니다.
  • 본인 네 스택의 삭제 완료를 재조회했습니다.
  • 서비스 CNAME을 수동 정리하고 공유 인증서 검증 레코드는 구분했습니다.
  • 보존 자원별 유지/삭제 결정과 담당자를 기록했습니다.
  • 공유 네트워크·인증서·다른 팀 자원을 유지했습니다.
  • 별도 GPU 자원과 과금 반영 지연까지 비용 표에 기록했습니다.

AI CLI 카드: 13. 정리 · 참고: AWS 자원 매핑

AI CLI 프롬프트 카드

아래 프롬프트를 복사해 실습 EC2에서 선택한 Codex, Kiro CLI, Claude Code의 대화 입력창에 붙여넣습니다. Markdown 카드 다운로드

Codex프롬프트 입력

선택한 AI CLI의 대화 입력창에 붙여넣으세요. 세 도구가 같은 프롬프트를 사용합니다.

Robot Atlas 워크숍 13장의 자원 정리를 도와주세요.
ROBOT_REPO/workshop/chapters/13-cleanup.md를 읽고 ROBOT_LAB의 바인딩과
ROBOT_TEAM/ROBOT_CONFIG가 일치하는지 먼저 확인하세요.

작업 순서:
1. 실제 삭제 전에 app/agentcore 상태와 cleanup.py의 read-only inventory를 저장합니다.
2. stack ID, Project, DeploymentOwner, 참가자 접두사, Retain 자원을 대조합니다.
3. 삭제가 요청된 범위에서만 본인 app의 scripts/cleanup.py --execute를 실행합니다.
4. App→Edge→AgentCore→Foundation 삭제 후 실제 상태를 다시 조회합니다.
5. 이전 inventory를 보존해 S3 버전·DynamoDB·ECR·Secret·로그 잔여물을 정리표에 남깁니다.
6. 서비스 CNAME의 수동 삭제를 안내하고, ACM 검증 레코드와 공유 인증서를 구분합니다.

경계:
운영 루트의 cleanup.py, 다른 참가자, 이름이 비슷한 자원을 사용하지 마세요.
바인딩·계정·소유 태그 검사를 제거하지 마세요.
기존 VPC, NAT, Subnet, IGW, endpoint, DNS 존/NS, 공유 인증서를 유지하세요.
진행 중인 CloudFormation 작업을 중복 삭제로 방해하지 마세요.
Retain 데이터는 스택 삭제만으로 지워지지 않습니다. 별도 데이터 삭제를 임의로 수행하지 마세요.
이 정리기는 별도 Isaac Sim/EKS GPU 자원을 포함하지 않습니다. 해당 트랙의 정리 여부를 따로 기록하세요.
전역 docker prune이나 공유 호스트의 다른 프로세스 종료를 하지 마세요.
Secret 값이나 자격 증명을 읽거나 보고서에 넣지 마세요.

결과:
삭제한 정확한 스택, 확인한 최종 상태, 보존 자원 ID와 유지/삭제 결정,
수동 DNS 상태, 남은 GPU/저장 비용, 아직 수행하지 않은 작업을 보고하세요.
잔여 과금 자원이 있으면 비용이 완전히 없어졌다고 말하지 마세요.

읽기 기록

읽음 표시는 이 브라우저에만 저장됩니다.
실제 실습 결과는 터미널에서 확인하세요.